我正在开发OSX和iOS上的VOIP应用程序,并将使用AudioQueue for Audio流程,想知道的是,默认情况下,AudioQueue支持声学回声消除,或者我们是否需要添加对它的支持,
如果我们需要实现,我相信一些开源库必须像Speex一样实现有任何可用的示例显示AudioQueue与Speex或任何其他库的集成
答案 0 :(得分:17)
据我所知,您必须使用Audio Units来访问系统的回声消除。您可以使用kAudioUnitSubType_VoiceProcessingIO
代替kAudioUnitSubType_RemoteIO
来完成此操作。
您可能仍想使用音频单元,以控制延迟。
您可以使用渲染回调函数从音频队列中获取数据并将其传递给您的I / O单元。对于传出,请使用AudioUnitRender
。
答案 1 :(得分:-1)
感谢David和This post,我意识到iOS上的回声消除需要进行以下更改:
desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO
这将根据apple documentation启用硬件回声抑制。但是,您仍需要为AudioStream描述使用特定标志:
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical;