单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)

单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件)html

单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)web

webrtc的音频处理模块分为降噪ns,回音消除aec,回声控制acem,音频增益agc,静音检测部分。另外webrtc已经封装好了一套音频处理模块APM,若是不是有特殊必要,使用者若是要用到回声消除等较为复杂的模块时,最好使用所有的音频处理模块二不要单独编译其中一部分以避免浪费宝贵的时间。算法

 

可是音频降噪部分较为简单,用起来也就几个函数,除了须要传入的音频数据之外,须要调整的参数也就是音频采样率和降噪等级。另外这部分代码采用纯C语言语法编写,能够跨平台编译。整个算法也不算特别复杂,运行起来占CPU也不是不少,能够上至i7 8核CPU的高配电脑,下至380Mhz的小嵌入式系统以及一切版本的移动端产品中编译运行。另外效果也十分不错,经过本文附带的测试demo你们就能够感觉一下。xcode

降噪有两部分代码,一套是定点算法(noise_suppression_x.h),一套是浮点算法(noise_suppression.h)。相对来讲浮点算法精度更高,可是耗系统资源更多,特别是浮点计算能力较弱的低端ARM CPU上。可是通常来讲浮点和定点算法在实际效果上听不出区别出来,估计是我没遇到过必须必需要用浮点的状况。在使用上,浮点和定点也仅仅只是变量名和函数没中多出了一个x。函数

音频处理的时候webrtc一次仅能处理10ms数据,小于10ms的数据不要传入,由于即时是传入小于10ms的数据最后传入也是按照10ms的数据传出,此时会出现问题。另外支持采样率也只有8K,16K,32K三种,不管是降噪模块,或者是回声消除增益等等均是如此。对于8000采样率,16bit的音频数据,10ms的时间采样点就是80个,一个采样点16bit也就是两个字节,那么须要传入WebRtcNsx_Process的数据就是160字节。对于8000和16000采样率的音频数据在使用时能够无论高频部分,只须要传入低频数据便可,可是对于32K采样率的数据就必须经过滤波接口将数据分为高频和低频传入,传入降噪后再组合成音频数据。大于32K的音频文件就必需要经过重采样接口降频到对应的采样率再处理,在demo源码里面有对应的接口使用者能够去查。post

降噪的开源代码包括定点降噪,浮点降噪,音频重采样,滤波接口,抠出来后修改了头文件包含位置使其都在同一目录下,若是是xcode下编译可能会有once函数编译不过的问题,此时修改一个宏便可,为了尽可能避免修改问题就不改动这部分了。测试

示例代码给了32K采样率的测试demo,也有8K采样率实现。16K采样率只须要将8K内部的数据大小由80改为160便可,PCM音频文件能够由Audacity软件经过文件--导入--原始数据,选择好bit位数,声道,采样率便可显示波形,播放。spa

 

源码下载:WebRtcAudioTest.rarcode

相关文章
相关标签/搜索