iOS 5/6:首次使用 CoreAudio 后音量变小

Posted

技术标签:

【中文标题】iOS 5/6:首次使用 CoreAudio 后音量变小【英文标题】:iOS 5/6: low volume after first usage of CoreAudio 【发布时间】:2012-10-02 10:48:08 【问题描述】:

我在开发 VoIP 应用程序。 Audiosession 的模式设置为 kAudioSessionMode_VoiceChat。

对于通话,我打开一个子类型为 kAudioUnitSubType_VoiceProcessingIO 的 CoreAudio AudioUnit。一切正常。第一次通话后,我使用 AudioUnitUninitialize() 关闭 AudioUnit 并停用音频会话。

然而,现在似乎音频设备没有正确释放:铃声音量非常低,媒体播放器的音量比平时低。对于后续呼叫,我无法再激活 kAudioUnitSubType_VoiceProcessingIO。它可以使用 kAudioUnitSubType_RemoteIO 创建一个 AudioUnit,但通话的音量非常低(接收器和扬声器)。

这首先发生在 iOS 5 上。对于 iOS 6 上的 iPhone 5,情况更糟(甚至更低的音量)。

有人看过吗?除了 AudioUnitUninitialize() 之外,我还需要做更多的事情来释放语音处理单元吗?

【问题讨论】:

【参考方案1】:

我找到了解决方案:我错误地使用了AudioUnitUninitialize() 来释放使用AudioComponentInstanceNew() 检索的音频组件。正确的是使用AudioComponentInstanceDispose()

【讨论】:

嗨,我也有类似的问题。对我来说,我在 vpio 和 remoteio 之间切换。我按照您的建议进行了尝试,使用 AudioComponentInstanceDispose() 但在这样做并检索新副本之后,我无法再在实例上设置属性。有任何想法吗?谢谢。 在VPIO上,即使使用了AudioComponentInstanceDispose(),音量还是会降低,有人吗?【参考方案2】:

是的,您需要在使用 voiceProcessingIO 时处理 audioUnit。由于某种原因,使用 RemoteIO 子类型时没有问题。因此,每当您获得 OSStatus -66635 (kAudioQueueErr_MultipleVoiceProcessors) 时,请检查是否缺少 AudioComponentInstanceDispose() 调用。

【讨论】:

嗨 MrJ,请问您在哪里找到 OSStatus -66635 的定义?非常感谢。 我就这个问题联系了苹果开发支持,他们已将定义发送给我(除了其他信息)。我不确定您是否可以自己找到..我没有:) PS:对于您的其他问题(我还不能评论其他答案):我用AudioComponentInstanceNew重新初始化了全新的音频单元,处理后。如果没有等待播放的缓冲数据(我在处理之前将它们删除),这将非常快。

以上是关于iOS 5/6:首次使用 CoreAudio 后音量变小的主要内容,如果未能解决你的问题,请参考以下文章

CoreAudio,iOS:无法通过 RemoteIO 使用单声道输入和立体声输出

iOS 音频开发之CoreAudio

混合声波(iOS 上的 CoreAudio)

如何在 iOS 下使用设备上的 CoreAudio 以编程方式创建一定长度的空 .m4a 文件?

iOS,CoreAudio:一个奇怪的'CADebugPrintf.h:没有这样的文件或目录......'错误

使用 CoreAudio 以编程方式在 Swift 中创建聚合音频设备