单独编译和使用webrtc音频增益模块(AGC)
来源:互联网 发布:yessat 知乎 编辑:程序博客网 时间:2024/06/06 16:34
原文转载于:http://www.cnblogs.com/mod109/p/5767867.html#top 非常感谢。
webrtc的音频处理模块分为降噪ns(nsx),回音消除aec(回声控制acem),音频增益agc,静音检测部分。另外webrtc已经封装好了一套音频处理模块APM,如果不是有特殊必要,使用者如果要用到回声消除等较为复杂的模块时,最好使用全部的音频处理模块,不要单独编译其中一部分以免浪费宝贵的时间。
但是音频降噪,增益功能较为简单,还能直接使用。这部分源码是我从webrtc中抠出来,单独放到VS2010工程下使用。其中包括重采样以及滤波,降噪功能。这部分是直接复用之前的博文单独使用webrtc降噪功能的代码,也就是说,其实这部分博文只是从之前降噪的基础上扣出了部分声音增益的代码而已。所以关于webrtc的介绍就不多说了,如果有兴趣可以参考之前的博文;
测试效果也极为不错,从一首8000采样率的歌曲可以看到,其增益前和增益后的波形如下:
OK,波形还算比较满意吧?不过实际效果如何,还需要听一下才知道。
其实增益使用起来也很简单,简单代码如下:
void WebRtcAgcTest(char *filename, char *outfilename,int fs){ FILE *infp = NULL; FILE *outfp = NULL; short *pData = NULL; short *pOutData = NULL; void *agcHandle = NULL; do { WebRtcAgc_Create(&agcHandle); int minLevel = 0; int maxLevel = 255; int agcMode = kAgcModeFixedDigital; WebRtcAgc_Init(agcHandle, minLevel, maxLevel, agcMode, fs); WebRtcAgc_config_t agcConfig; agcConfig.compressionGaindB = 20; agcConfig.limiterEnable = 1; agcConfig.targetLevelDbfs = 3; WebRtcAgc_set_config(agcHandle, agcConfig); infp = fopen(filename,"rb"); int frameSize = 80; pData = (short*)malloc(frameSize*sizeof(short)); pOutData = (short*)malloc(frameSize*sizeof(short)); outfp = fopen(outfilename,"wb"); int len = frameSize*sizeof(short); int micLevelIn = 0; int micLevelOut = 0; while(TRUE) { memset(pData, 0, len); len = fread(pData, 1, len, infp); if (len > 0) { int inMicLevel = micLevelOut; int outMicLevel = 0; uint8_t saturationWarning; int nAgcRet = WebRtcAgc_Process(agcHandle, pData, NULL, frameSize, pOutData,NULL, inMicLevel, &outMicLevel, 0, &saturationWarning); if (nAgcRet != 0) { printf("failed in WebRtcAgc_Process\n"); break; } micLevelIn = outMicLevel; fwrite(pOutData, 1, len, outfp); } else { break; } } } while (0); fclose(infp); fclose(outfp); free(pData); free(pOutData); WebRtcAgc_Free(agcHandle);}
当然,这段代码只是对于8K和16K采样率的音频,如果是32K采样率需要采用滤波分频,然后分别传入最后传出,具体用法和降噪是一样的道理,所以我就不再单独列出来了。具体用法可以下载本文所附的源码,参考32K采样率音频降噪的使用方法使用。
源码下载:WebRtcAudioTest.rar
阅读全文
0 0
- 单独编译和使用webrtc音频增益模块(AGC)
- Android 单独抽取 WebRtc-AGC(音频增益) 模块
- 单独编译和使用webrtc音频降噪模块(NS)
- 单独编译和使用webrtc音频回声消除模块(AEC)
- 【单独编译使用WebRTC的音频处理模块 - android】
- 单独编译使用WebRTC的音频处理模块 - android
- 单独编译使用WebRTC的音频处理模块 - android
- 单独编译使用WebRTC的音频处理模块 - android
- 单独编译使用WebRTC的音频处理模块 - android
- 单独编译使用WebRTC的音频处理模块 - android
- 单独编译使用WebRTC的音频处理模块
- 单独编译使用WebRTC的音频处理模块 - android
- 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)
- webrtc中关于AEC,AGC,NS模块的使用总结
- webrtc(一) agc
- Android 单独抽取 WebRtc-NS/NSX(音频降噪) 模块
- 自动增益(AGC)算法小结
- Android Studio 单独编译WebRTC的 vad 模块
- 如何降低运放电路中的电源噪声
- Android端通过Usb建立Socket通讯(实时发送视频数据)
- 华为交换机con0,telnet,vlan,trunk,access配置案例
- js调试在控制台输出值
- This UDF provides automation support for Java applications
- 单独编译和使用webrtc音频增益模块(AGC)
- #OSG+VS#第十九周
- monkey的基本使用
- 纯CSS实现导航栏效果
- 转发Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)
- 序
- 力推一个php的框架,专门为API开发而生的
- git学习
- 串口传输数据卡死问题解决方案