问题标签 [audioqueueservices]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 音频队列服务回调:AudioStreamPacketDescription 无法复制?
我正在创建一个简单的 iOS 应用程序,它使用循环缓冲区记录音频。这意味着它会持续记录音频,但仅将最后 15 个缓冲区保留在内存中。
我通过复制从以下位置获得的所有数据来做到这一点AudioInputCallback
:
这很好用,AIF
当我停止录制后将所有缓冲区保存到文件时,我可以正确录制文件。因此,将数据复制到其他缓冲区可以正常工作。
然而问题是,当我使用M4A
可变数据包时,相同的例程不起作用。当我将该AudioFileWritePackets
方法放在回调中时,它可以正常工作,但是当我之后在存储的缓冲数据上使用它时,它会失败。
事实证明,这是由const AudioStreamPacketDescription *inPacketDescs
当我将回调函数本身(在那里记录)中的数据更改为我的副本时它立即失败的数据引起的。但是数据本身是相同的。
这是格式:
我使用以下方法在我的代码中创建一个副本:
但是,当使用 theitem.inPacketDescs
而不是时,inPacketDescs
它会立即失败。而这三个字段的数据是相同的。(我使用调试器进行了检查)。
我现在有点没有选择了。我看到提供的变量是const
,所以我担心这有一些有意义的目的,比如AudioFileWritePackets
要求它是相同的内存地址左右?那将是非常愚蠢的,但我真的不知道了。
关于造成这种情况的任何想法?关于如何以不同方式将其保存到循环缓冲区的想法?
ios - AudioFileStreamParseBytes 返回“pty?” 在流式传输的记录数据上
我正在开发一个应用程序,该应用程序涉及在一台设备上录制音频并在另一台通过套接字连接连接的设备上播放。
我正在使用 Audioqueues 在一台对等设备上记录数据,并通过 OTA 流式传输该数据,如 SpeakHere 示例中所示。
我正在尝试使用另一端的 AudioFileStream 和 AudioQueue 在接收设备上播放该数据以进行播放,如 Matt Gallagher 的 AudioStreamer 示例。
对 AudioFileStreamParseBytes 的调用返回“pty?” 错误。因此,与此调用关联的任何回调(用于属性和音频数据包)都不会被调用。
在线流式传输 mp3 和 HTTP 流等有大量示例代码。但是,如果我想流式传输使用 AudioQueue 录制的音频,我可能会遗漏一些东西吗?可能与 AudioQueue 属性相关的东西?
有人还可以建议一种方法来检查我收到的数据是否实际上是合理的音频数据?
一小段代码:
此外,我已经检查了 packet->mVoiceData 有大约 44Kbytes 的数据(尽管不确定它是否是有意义的数据)并且 packet->msizeInBytes 反映了这个数字。
任何帮助表示赞赏。谢谢!
ios - 如何使用 AudioQueueEnqueueBuffer... 和 kAudioFormatMPEG4AAC_HE(VBR) 播放静音
我正在使用网络应用程序,所以我会丢失数据包或我开始播放的地方,没有播放数据。这是我的源代码:
但如果这些不是数据包,我会收到错误 kAudioQueueErr_BufferEmpty,所以我只想知道如何使用 aac_he 类型播放静音帧(vbr)
ios - iOS 5 上的音频输出队列
有没有人经历过 iOS 5 中的音频输出队列是静默的,即使队列正在运行并且没有返回错误?
下载了具有相同问题的示例代码。
ios - 使用哪个音频 API 来创建音频效果?
我想录制音频并应用定制的音效过滤器,然后播放。
音频单元和音频队列服务是我正在寻找的 API 吗?还是有其他更适合此目的的 API?
此外,我被告知无法在 iOS 上自定义音频单元,因此只有一些预制效果可用。这是真的?
ios - 我们可以使用 Core Audio SDK 为 iOS 开发音效单元吗?
有一个所谓的“核心音频 SDK”,Apple 称它用于“Mac OS X 开发”。由于 Mac 上的 Core Audio 和 iOS 上的 Core Audio 有相似之处,也许也可以将该 SDK 用于 iOS 开发?
ios - 当我需要自定义音频效果时,我是否需要处理音频单元,或者我可以依赖音频队列服务?
据我了解,音频队列服务是比使用音频单元的音频单元更高级别的 API。OpenAL 也使用音频单元。所以 Audio Units 是 iOS 中最低级别的音频 API。
我需要录制声音,然后将自定义过滤器应用于音频流并播放。Audio Queue Services 似乎很适合录制,也可以用来播放。但我仍然不确定他们是否允许将自己的算法应用于音频流,就像 AURemoteIO 音频单元一样。
iphone - iPhone 4s 麦克风比 iPhone 4 麦克风差
我正在使用采样率为 44100 Hz 的音频队列框架来记录来自 iPhone 上麦克风的数据。
然后我测试了 iPhone 4 和 iPhone 4s 的频率响应。 与 iPhone 4 不同, iPhone 4s麦克风在高于 20 kHz 的频率上是盲的。
麦克风似乎比以前的型号更好。是硬件限制吗?是软件限制吗?还是一些错误配置(启用噪声压缩或其他)?
objective-c - 无法在 iOS 的后台模式下重新启动中断的音频输入队列
我正在编写一个使用 AudioQueue 进行录制的 iOS 应用程序。我创建了一个配置为获取线性 PCM 的输入队列,声明了这个队列并且一切都按预期工作。
为了管理中断,我实现了 AVAudioSession 的委托方法来捕捉中断的开始和结束。endInterruption 方法如下所示:
如果应用程序在前台被中断,则一切正常。如果中断发生在后台,就会出现问题。激活音频会话会导致错误!cat:
指定的音频会话类别不能用于尝试的音频操作。例如,您尝试播放或录制音频会话类别设置为 kAudioSessionCategory_AudioProcessing。
在不激活会话的情况下启动队列会导致错误代码:-12985
此时,类别设置为AVAudioSessionCategoryPlayAndRecord,模式为AVAudioSessionModeDefault。
我找不到有关此错误消息的任何文档,也无法在后台重新启动输入音频队列。
ios - 音频队列服务和 iPhone 系统声音的时序
我正在使用音频队列服务分析 iPhone/iPod Touch 上的传入音频。分析器的期望行为归结为:当应用程序激活时,开始分析;当App被发送到后台时,停止分析。
我正在使用一种直接的方法,只要 App 状态发生变化,就使用 AppDelegate 来启动和停止分析器。
这是一些代码:
所有变量都已初始化并正在工作 - 将其视为给定并经过测试。我知道,队列和缓冲区不应该每次都被处理和分配,但现在没有什么不同,而且这种方式更完整。
这是发生的事情:
步骤 1)启动应用程序,音频队列开始,Bob 是你的叔叔。
步骤 2)按下电源按钮,应用程序暂停。但是您听不到锁定声音,因为音频队列似乎仍然阻止了系统声音。但是,有时它确实会出现,主要是在应用程序首次启动之后,但这并不可靠。第一个故障。
步骤 3)按下主页按钮并解锁手机。同样,您不会听到解锁手机的系统声音,因为音频队列已经接管。不过,您可能会听到一小段解锁声音。有时。也不靠谱。第二个故障。
步骤 4)按主页按钮并将应用程序发送到后台。App消失约一秒后,系统记得无法播放第3步的解锁声音,立即播放。全音量。这真的很糟糕。
这让我想到了两个问题:
问题 1):当按下电源按钮时,我看不到任何其他方法可以比 applicationWillResignActive: 更早地停止音频队列。我在这里缺少什么吗?我对缺少锁定声音感到满意,但我很高兴了解任何其他方法可以使其可靠地发声(或不发声)。
问题2):第4步的延迟解锁声音让我很头疼。防止这种情况的一种简单方法是延迟音频队列的启动,以便可以畅通无阻地播放解锁声音。但这似乎是一种 hack,如果有人可以为我指出一个更好的方向,我会成为一个更快乐的编码员。
谢谢/安德烈亚斯