视频开发音视频

ios 回声消除,基于Audio Unit

2017-11-28  本文已影响1083人  huisedediao

2018.03.28

----- 好多同学私信不会用,GitHub项目添加了示例demo,具体使用参考demo
----- 添加了pcm转WAV的方法(我只是搬运工)

先说下为什么会有回声。

由于手机app(A端)需要一边录音一边播放声音。A端 在通过麦克风采集输入声音的时候,把手机正在播放的声音(由 B端 传输过来)也采集进去了,并将采集到的声音传到 B端 播放,因此在 B端 听起来除了有 A端 原本想要传的声音,还有 B端 之前传出去的声音,就造成了所谓的回声。

原理明白就好解决了,回声消除,就是将采集到的声音数据中的属于手机播放的那部分声音去除,Audio Unit 已经集成了回声消除功能,直接调用就行。
基于Audio Unit封装了一个回声消除的库,包括回声消除和对pcm数据进行播放。

传送门: XBEchoCancellation

使用:

获取麦克风输入:

XBEchoCancellation *echo = [XBEchoCancellation shared];
echo.bl_input = ^(AudioBufferList *bufferList) {
    AudioBuffer buffer = bufferList->mBuffers[0];
    // buffer即从麦克风获取到的数据,默认已经消除了回音
};
[echo startInput];

播放pcm音频数据:

XBEchoCancellation *echo = [XBEchoCancellation shared];
echo.bl_output = ^(AudioBufferList *bufferList, UInt32 inNumberFrames) {
    AudioBuffer buffer = bufferList->mBuffers[0];
    // 这里把要传给发声设备的pcm数据赋给buffer
};
[echo startOutput];
上一篇下一篇

猜你喜欢

热点阅读