2012-10-02 9 views
7

Lavoro su un'app VoIP. La modalità di AudioSession è impostata su kAudioSessionMode_VoiceChat.iOS 5/6: volume basso dopo il primo utilizzo di CoreAudio

Per una chiamata, apro un AudioAnit CoreAudio con sottotipo kAudioUnitSubType_VoiceProcessingIO. Tutto funziona bene Dopo la prima chiamata, chiudo AudioUnit con AudioUnitUninitialize() e disattivo la sessione audio.

Ora, tuttavia, sembra che il dispositivo audio non sia stato rilasciato correttamente: il volume della suoneria è molto basso, il volume del lettore multimediale è inferiore al normale. E per una chiamata successiva, non posso più attivare kAudioUnitSubType_VoiceProcessingIO. Funziona invece per creare un AudioUnit con kAudioUnitSubType_RemoteIO, ma anche il volume della chiamata è molto basso (ricevitore e altoparlante).

Questo si è verificato per la prima volta su iOS 5. Con l'iPhone 5 su iOS 6, è ancora peggio (anche con volume inferiore).

Qualcuno ha visto questo? Devo fare più di AudioUnitUninitialize() per rilasciare l'unità di elaborazione vocale?

risposta

8

Ho trovato la soluzione: ho erroneamente utilizzato AudioUnitUninitialize() per liberare il componente audio recuperato con AudioComponentInstanceNew(). Correggere è usare AudioComponentInstanceDispose().

+1

Ciao, ho un problema simile. Per me sto passando da vpio a remoteio. Ho provato come suggerito, usando AudioComponentInstanceDispose() ma dopo averlo fatto e recuperando una nuova copia non riesco più a impostare la proprietà sull'istanza. Qualche idea? Grazie. – lppier

+0

su VPIO, anche dopo aver usato AudioComponentInstanceDispose(), il volume si abbassa ancora, chiunque? –

4

Sì, è necessario disporre dell'audioUnit quando si utilizza voiceProcessingIO. Per qualche motivo non ci sono problemi quando si utilizza il sottotipo RemoteIO. Pertanto, ogni volta che si ottiene OSStatus -66635 (kAudioQueueErr_MultipleVoiceProcessors), verificare la presenza di chiamate AudioComponentInstanceDispose() mancanti.

+1

Ciao MrJ, posso chiederti dove hai trovato la definizione di OSStatus -66635? Grazie mille. – lppier

+0

Ho contattato il supporto per apple dev su questo problema e mi hanno inviato la definizione (oltre ad altre informazioni). Non sono sicuro che tu possa trovarlo da solo .. non l'ho fatto :) PS: per la tua altra domanda (non posso commentare ancora altre risposte): re-inizializzo l'unità autdio completamente nuova con 'AudioComponentInstanceNew ', dopo averlo rimosso. È piuttosto veloce se non ci sono dati bufferizzati che aspettano di essere riprodotti (li faccio zapping prima dello smaltimento). – MrJ

Problemi correlati