2013-03-18 18 views
6

Ich entwickle VOIP-Anwendung auf OSX und iOS und wird AudioQueue für Audio-Flow verwenden, was wissen wollen ist, unterstützt AudioQueue standardmäßig akustische Echounterdrückung oder müssen wir die Unterstützung für sie,
Wenn wir implementieren müssen, glaube ich, einige Open-Source-Bibliothek wie Speex umgesetzt werden muss gibt es kein Beispiel verfügbar zeigt Integration von Audioqueue mit Speex oder jede andere BibliothekAEC (Echo Cancellation Support) in OSX mit AudioQueue

+1

Konnten Sie Ihr Problem lösen? Ich habe die gleiche Frage. – Vincenzo

Antwort

13

Soweit ich finden kann , müssen Sie Audio Units verwenden, um auf die Echokompensation des Systems zuzugreifen. Sie tun das, indem Sie kAudioUnitSubType_VoiceProcessingIO anstelle von kAudioUnitSubType_RemoteIO verwenden.

Sie möchten wahrscheinlich Audio Units trotzdem verwenden, um Ihre Latenz zu kontrollieren.

Sie können eine Render-Callback-Funktion verwenden, um Daten aus einer Audio-Warteschlange abzurufen und an Ihre E/A-Einheit zu senden. Verwenden Sie für ausgehende Nachrichten .

+0

danke David, aber ich bin auf OSX nicht in iOS wird es funktionieren? – Amitg2k12

+1

Die Voice Processing IO-Einheit ist ab 10.7 verfügbar: https://developer.apple.com/library/mac/#documentation/AudioUnit/Reference/AUComponentServicesReference/Reference/reference.html#//apple_ref/doc/uid/ TP40007291 –

+0

Ich bin auf dem neuesten OSX Sdk und stellen Sie die VoiceProcessingIO, aber immer noch kommt Echo, irgendwelche Lösungen – Amitg2k12

-1

Dank David und This post habe ich folgende Änderungen realisiert für Echo Cancellation auf iOS erforderlich sind:

desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO 

Diese Hardware-Echounterdrückung nach apple documentation ermöglichen. Sie müssen jedoch immer noch bestimmte Flags für die AudioStream-Beschreibung verwenden:

audioFormat.mFormatFlags = kAudioFormatFlagsCanonical;