我是靠谱客的博主 神勇美女,最近开发中收集的这篇文章主要介绍单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 = 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_Processn");
                    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

转载于:https://www.cnblogs.com/mod109/p/5767867.html

最后

以上就是神勇美女为你收集整理的单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件)的全部内容,希望文章能够帮你解决单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部