OSX中的AEC(回声消除支持)使用AudioQueue

时间:2013-03-18 06:39:46

标签: objective-c macos cocoa audioqueue echo-cancellation

我正在开发OSX和iOS上的VOIP应用程序,并将使用AudioQueue for Audio流程,想知道的是,默认情况下,AudioQueue支持声学回声消除,或者我们是否需要添加对它的支持,
如果我们需要实现,我相信一些开源库必须像Speex一样实现有任何可用的示例显示AudioQueue与Speex或任何其他库的集成

2 个答案:

答案 0 :(得分:17)

据我所知,您必须使用Audio Units来访问系统的回声消除。您可以使用kAudioUnitSubType_VoiceProcessingIO代替kAudioUnitSubType_RemoteIO来完成此操作。

您可能仍想使用音频单元,以控制延迟。

您可以使用渲染回调函数从音频队列中获取数据并将其传递给您的I / O单元。对于传出,请使用AudioUnitRender

答案 1 :(得分:-1)

感谢DavidThis post,我意识到iOS上的回声消除需要进行以下更改:

desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO

这将根据apple documentation启用硬件回声抑制。但是,您仍需要为AudioStream描述使用特定标志:

audioFormat.mFormatFlags = kAudioFormatFlagsCanonical;