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

但是音频降噪,增益功能较为简单,还能直接使用。这部分源码是我从webrtc中抠出来,单独放到VS2010工程下使用。其中包括重采样以及滤波,降噪功能。这部分是直接复用之前的博文单独使用webrtc降噪功能的代码,也就是说,其实这部分博文只是从之前降噪的基础上扣出了部分声音增益的代码而已。所以关于webrtc的介绍就不多说了,如果有兴趣可以参考之前的博文;

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

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

因为最近mac电脑不在身边,所以不知道在xcode下能否编译,不过简单看代码应该问题不大。另外测试效果也极为不错,从一首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 = ;
int maxLevel = ;
int agcMode = kAgcModeFixedDigital;
WebRtcAgc_Init(agcHandle, minLevel, maxLevel, agcMode, fs); WebRtcAgc_config_t agcConfig;
agcConfig.compressionGaindB = ;
agcConfig.limiterEnable = ;
agcConfig.targetLevelDbfs = ;
WebRtcAgc_set_config(agcHandle, agcConfig); infp = fopen(filename,"rb");
int frameSize = ;
pData = (short*)malloc(frameSize*sizeof(short));
pOutData = (short*)malloc(frameSize*sizeof(short)); outfp = fopen(outfilename,"wb");
int len = frameSize*sizeof(short);
int micLevelIn = ;
int micLevelOut = ;
while(TRUE)
{
memset(pData, , len);
len = fread(pData, , len, infp);
if (len > )
{
int inMicLevel = micLevelOut;
int outMicLevel = ;
uint8_t saturationWarning;
int nAgcRet = WebRtcAgc_Process(agcHandle, pData, NULL, frameSize, pOutData,NULL, inMicLevel, &outMicLevel, , &saturationWarning);
if (nAgcRet != )
{
printf("failed in WebRtcAgc_Process\n");
break;
}
micLevelIn = outMicLevel;
fwrite(pOutData, , len, outfp);
}
else
{
break;
}
}
} while (); fclose(infp);
fclose(outfp);
free(pData);
free(pOutData);
WebRtcAgc_Free(agcHandle);
}

当然,这段代码只是对于8K和16K采样率的音频,如果是32K采样率需要采用滤波分频,然后分别传入最后传出,具体用法和降噪是一样的道理,所以我就不再单独列出来了。具体用法可以下载本文所附的源码,参考32K采样率音频降噪的使用方法使用。

源码下载:WebRtcAudioTest.rar

单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件)的更多相关文章

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

    单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件) webrtc的音频处理模块分为降噪ns,回音消除aec,回声 ...

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

    单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 说实话很不想写这篇文章,因为这和我一贯推崇的最好全部编译并使用w ...

  3. 音频降噪算法 附完整C代码

    降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法和音频算法 都有其共通点. 图像是偏向 空间 处理,例如图片中的某个区域. 图像很多时候是以二维数据 ...

  4. 基于傅里叶变换的音频重采样算法 (附完整c代码)

    前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...

  5. python附录-builtins.py模块str类源码(含str官方文档链接)

    python附录-builtins.py模块str类源码 str官方文档链接:https://docs.python.org/3/library/stdtypes.html#text-sequence ...

  6. (day59)十一、CSRF、Auth模块、impotlib模块、settings源码

    目录 一.模拟实现中间件的编程思想 (一)impotlib模块 (二)实现功能的配置使用 二.跨站请求伪造CSRF (一)由来 (二)form表单的CSRF (三)ajax中的CSRF (1)通过da ...

  7. socketserver模块使用与源码分析

    socketserver模块使用与源码分析 前言 在前面的学习中我们其实已经可以通过socket模块来建立我们的服务端,并且还介绍了关于TCP协议的粘包问题.但是还有一个非常大的问题就是我们所编写的S ...

  8. WebRTC 音频采样算法 附完整C++示例代码

    之前有大概介绍了音频采样相关的思路,详情见<简洁明了的插值音频重采样算法例子 (附完整C代码)>. 音频方面的开源项目很多很多. 最知名的莫过于谷歌开源的WebRTC, 其中的音频模块就包 ...

  9. Android FM 模块学习之四 源码解析(1)

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 前一章我们了解了FM手动调频,接下 ...

随机推荐

  1. touchWX 自定义组件以及传值

    创建如图文件 index.wxc: <template> <view class="wx-test" bindtap="handleTap"& ...

  2. mongo之$max

    原集合: { _id: 1, highScore: 800, lowScore: 200 } 应用: #意思是:更新_id 等于1 的记录,条件是highScore 950>原纪录的highSc ...

  3. day01 python起源 介绍 解释器 变量 流程控制if

    day01 python   一.python的起源     1.python简介     java 企业级应用, android, app     c 操作系统, 做开发语言的, 游戏的内核     ...

  4. 干货满满!10分钟看懂Docker和K8S

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...

  5. mysql和postgresql查询数据库中哪些表包含某个字段

    想知道数据库中哪表含有edu_status字段   mysql> select table_name,column_name from information_schema.columns wh ...

  6. Python with语句的概率,不多说了直接上代码!

    python中的with语句用于访问资源.它确保执行指定的__exit__(“清理”)操作,而不管释放被访问资源的处理过程中的错误或异常,例如读取和写入文件后自动关闭.线程中锁的自动获取和释放等. p ...

  7. NX二次开发-测量投影距离

    NXOPEN方法,直接录制测量投影距离命令 NX9+VS2012 #include <NXOpen/Annotations.hxx> #include <NXOpen/Assembl ...

  8. git删除持久化存储的账号密码.git-credentials

    git在提交时,发现提交不了,个人信息不是自己的,通过 git config --list 看到邮箱和用户名都是自己的. 这时候就需要把以前记录过的信息都删掉. 1. 通过 git config -- ...

  9. (转)Android 创建与解析XML—— Dom4j方式 .

    转:http://blog.csdn.net/ithomer/article/details/7521605 1.Dom4j概述 dom4j is an easy to use, open sourc ...

  10. hdu多校第十场 1009 (hdu6699) Block Breaker bfs/模拟

    题意: 紧密排列的方块因为摩擦力一个一个稳定地挤在一起,但当一个方块的四个邻居中,上下两个至少空缺一个,左右两个至少空缺一个,则这个方块也将掉落. 每次锤掉一个方块,求多少个方块受牵连落下. 题解: ...