2018.07.26 更新
Audio Unit应用实例:XBVoiceTool
写了一个 Audio Unit 运用的例子,包括录音、播放PCM、播放MP3|AAC、音频数据相加进行混音、用MixUnit混音、根据传入的文件获取混音后的文件(搬运)、AAC编码、MP3编码
2018.03.28 更新
----- 好多同学私信不会用,GitHub项目添加了demo,具体使用参考demo
----- 添加了pcm转WAV的方法(我只是搬运工)
原文
本文Demo: XBEchoCancellation
先说下为什么会有回声。
由于手机app(A端)需要一边录音一边播放声音。A端 在通过麦克风采集输入声音的时候,把手机正在播放的声音(由 B端 传输过来)也采集进去了,并将采集到的声音传到 B端 播放,因此在 B端 听起来除了有 A端 原本想要传的声音,还有 B端 之前传出去的声音(也就是回声)。
我们要将采集到的声音数据中的属于手机播放的那部分声音去除,基于Audio Unit封装了一个工具类,支持回声消除和对pcm数据进行播放。
使用:
获取麦克风输入:
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];
种草一波
IOS FFmpeg从零开始编写属于自己的媒体播放器:
IOS FFmpeg零到自己的播放器1,解码
IOS FFmpeg零到自己的播放器2,OpenGL显示图片
IOS FFmpeg零到自己的播放器3,Audio Unit播放PCM音频数据
IOS FFmpeg零到自己的播放器4,架构