2012-10-02 39 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