2012-10-02 5 views
7

Ich arbeite an einer VoIP-App. Der AudioSession-Modus ist auf kAudioSessionMode_VoiceChat eingestellt.iOS 5/6: geringe Lautstärke nach der ersten Verwendung von CoreAudio

Für einen Anruf, öffne ich eine CoreAudio AudioUnit mit Subtyp kAudioUnitSubType_VoiceProcessingIO. Alles funktioniert gut. Nach dem ersten Anruf schließe ich AudioUnit mit AudioUnitUninitialize() und deaktiviere die Audio Session.

Jetzt scheint es jedoch so, als ob das Audiogerät nicht korrekt freigegeben wird: Die Ruftonlautstärke ist sehr niedrig, die Lautstärke des Medienplayers ist niedriger als gewöhnlich. Und für einen nachfolgenden Anruf kann ich kAudioUnitSubType_VoiceProcessingIO nicht mehr aktivieren. Es funktioniert, um stattdessen eine AudioUnit mit kAudioUnitSubType_RemoteIO zu erstellen, aber auch die Lautstärke des Anrufs ist sehr niedrig (sowohl der Empfänger als auch der Lautsprecher).

Das erste Mal auf iOS 5 aufgetreten. Mit dem iPhone 5 auf iOS 6 ist es noch schlimmer (noch geringere Lautstärke).

Hat jemand das gesehen? Muss ich mehr als AudioUnitUninitialize() tun, um die Sprachverarbeitungseinheit freizugeben?

Antwort

8

Ich habe die Lösung gefunden: Ich habe AudioUnitUninitialize() falsch verwendet, um die Audiokomponente freizugeben, die mit AudioComponentInstanceNew() abgerufen wird. Korrekt ist die Verwendung von AudioComponentInstanceDispose().

+1

Hallo, ich habe ein ähnliches Problem. Bei mir wechsle ich zwischen vpio und remoteio. Ich habe versucht, wie Sie vorgeschlagen haben, mit AudioComponentInstanceDispose(), aber nachdem ich dies getan habe und eine neue Kopie abzurufen, kann ich die Eigenschaft für die Instanz nicht mehr setzen. Irgendwelche Ideen? Vielen Dank. – lppier

+0

auf VPIO, auch nach der Verwendung von AudioComponentInstanceDispose(), das Volumen immer noch verringert, jeder? –

4

Ja, Sie müssen die audioUnit bei Verwendung von voiceProcessingIO entsorgen. Aus irgendeinem Grund gibt es kein Problem bei der Verwendung des RemoteIO-Subtyps. Wenn Sie also OSStatus -66635 (kAudioQueueErr_MultipleVoiceProcessors) erhalten, prüfen Sie, ob AudioComponentInstanceDispose() -Aufrufe fehlgeschlagen sind.

+1

Hallo MrJ, darf ich fragen, wo Sie die Definition des OSStatus -66635 gefunden haben? Vielen Dank. – lppier

+0

Ich kontaktierte den Apple Dev Support zu diesem Problem und sie haben mir die Definition (neben anderen Informationen) gesendet. Ich bin nicht sicher, ob Sie das auf eigene Faust finden könnten .. Ich habe nicht :) PS: für Ihre andere Frage (ich kann nicht andere Antworten noch kommentieren): Ich initialisiere die Autodio-Einheit komplett neu mit 'AudioComponentInstanceNew ', nachdem es veräußert wurde. Es ist ziemlich schnell, wenn keine gepufferten Daten darauf warten, abgespielt zu werden (ich zappe sie vor der Entsorgung). – MrJ

Verwandte Themen