2012-10-02 17 views
7

我在VoIP应用上工作。 AudioSession的模式设置为kAudioSessionMode_VoiceChat。iOS 5/6:首次使用CoreAudio后的低音量

对于一次调用,我打开一个CoreAudio AudioUnit,其子类型为kAudioUnitSubType_VoiceProcessingIO。一切正常。在第一次调用之后,我用AudioUnitUninitialize()关闭AudioUnit,然后停用音频会话。

但是,现在看起来好像音频设备没有正确发布:铃声音量非常低,媒体播放器的音量比平时低。对于随后的调用,我无法再激活kAudioUnitSubType_VoiceProcessingIO。它的作用是用kAudioUnitSubType_RemoteIO创建一个AudioUnit,而且通话的音量非常低(接收器和扬声器)。

这首先发生在iOS 5上。iOS 6上的iPhone 5更糟糕(甚至更低)。

有没有人看到这个?我是否需要做比AudioUnitUninitialize()更多的功能来释放语音处理单元?

回答

8

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

+1

嗨,我有一个类似的问题。对我来说,我正在切换vpio和remoteio。我试着按照你的建议使用AudioComponentInstanceDispose(),但是在完成之后,检索一个新的副本,我不能再对该实例设置属性。有任何想法吗?谢谢。 – lppier

+0

在VPIO上,甚至在使用AudioComponentInstanceDispose()后,音量仍然下降,任何人? –

4

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

+1

您好MrJ,请问您在哪里找到了OSStatus -66635的定义?非常感谢你。 – lppier

+0

我联系了苹果开发支持关于这个问题,他们给我的定义(除了其他信息)。我不知道你是否可以自己找到..我没有:) PS:为你的其他问题(我不能评论他人的答案呢):我重新初始化全新的autdio单元'AudioComponentInstanceNew ',在解开它之后。如果没有等待播放的缓冲数据,则速度非常快(我在处理之前将它们敲击)。 – MrJ