8

我在一个 VoIP 应用程序上工作。AudioSession 的模式设置为 kAudioSessionMode_VoiceChat。

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

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

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

有人见过这个吗?我需要做的不仅仅是 AudioUnitUninitialize() 来释放语音处理单元吗?

4

2 回答 2

8

我找到了解决方案:我错误地用于AudioUnitUninitialize()释放使用AudioComponentInstanceNew(). 正确的是使用AudioComponentInstanceDispose().

于 2012-10-04T14:34:41.867 回答
4

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

于 2012-10-17T14:04:58.257 回答