单独编译和使用webrtc音频增益模块(AGC)

2023-05-16

原文转载于: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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单独编译和使用webrtc音频增益模块(AGC) 的相关文章

  • TCP 粘包问题浅析及其解决方案

    最近一直在做中间件相关的东西 xff0c 所以接触到的各种协议比较多 xff0c 总的来说有TCP xff0c UDP xff0c HTTP等各种网络传输协议 xff0c 因此楼主想先从协议最基本的TCP粘包问题搞起 xff0c 把计算机网
  • Redis协议规范(译文)

    原文地址 xff1a haifeiWu的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 Redis客户端使用名为RESP xff08 Redis序列化协
  • Netty 源码中对 Redis 协议的实现

    原文地址 xff1a haifeiWu的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 近期一直在做网络协议相关的工作 xff0c 所以博客也就与之相关
  • 高性能无锁队列 Disruptor 初体验

    原文地址 xff1a haifeiWu和他朋友们的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 最近一直在研究队列的一些问题 xff0c 今天楼主要分
  • Vultr(云服务器)安装GUI图形化界面(已解决)

    服务器 xff1a Vultr OS xff1a Ubuntu 14 04 步骤 xff1a 1 远程登陆到服务器 2 确保所有的包和依赖关系是最新的 apt span class hljs keyword get span update
  • WorkerMan客户端连接失败

    workerman客户端连接失败 今天访问客服聊天功能发现不能发送信息 xff0c 然后看到是因为 WebSocket 连接失败 xff0c 图如下 xff1a 根据字面意思已经了解了问题是因为连接拒绝 xff0c 那么为什么会拒绝呢 xf
  • 2020计算机技术类,部分人工智能与软件工程SCI一区期刊列表(基于letpub数据)

    网上找了很久将计算机技术作为独立大区的期刊列表 xff0c 还是没有找到 所以我决定根据letpub的数据 xff0c 自己整理下 xff0c 方便以后查看 注 xff1a 由于2020与2019年的数据存在一些冲突 xff0c 部分数据可
  • IoT -- 解读物联网四层架构

    本文以物联网四层架构为基础 xff0c 从物联网产品设计的角度来解读每层架构的功能以及主要内容 xff0c 旨在为物联网产品设计以及实现思路感兴趣的物联网产品或研发人员有些帮助 通过互联网 xff0c 人和人之间可以传递和交流信息 物联网
  • 【putty无法连接Linux-centos7】

    一 二 1 vmware中打开虚拟机 xff0c 选择网络适配器 xff0c 选择模式 选择桥接模式 xff0c 则跟电脑主机一样使用以太网 xff0c 可以联网 xff0c 也可以ping通其他主机 xff0c 选择vmnet8 NAT模
  • 我的视觉SLAM学习的小小入门---Ubuntu18配置VINS-MONO

    前言 作为一名才接触视觉SLAM的菜鸟 xff0c 除了捧着高翔老师的书看着那晦涩难懂的代码与理论 xff0c 就是跟着高翔老师的课程囫囵吞枣地学着 但是似乎总不见成效 xff0c 时常想象着何时可以像大佬们一样建图 Vins mono可算
  • 关于Ubuntu(Debian)软件源报错问题及解决

    问题 xff1a 在执行sudo apt get update时出现以下报错 xff0c 查询得知是因为换源以后 xff0c 新的下载源没有公钥 W GPG error http mirrors aliyun com debian bust
  • Cmake常用指令

    1 SET SET lt variable gt lt value gt CACHE lt type gt lt docstring gt FORCE 将缓存条目variable设置为值 lt value gt xff0c 除非用户进行设置
  • [LeetCode] Two Sum 两数之和 java实现 C++实现

    LeetCode Two Sum 两数之和 java实现 C 43 43 实现 Given an array of integers return indices of the two numbers such that they add
  • FreeRTOS学习总结 (一)

    FreeRTOS学习总结 一 移植 上图是从FreeRTOS官网下载的源文件目录 xff0c 移植所需要的文件都在Source文件夹下 如上图 xff0c 在工程文件夹下创建FreeRTOS文件夹 xff0c 子文件夹和相应文件 xff0c
  • FreeRTOS学习总结 (二)

    FreeRTOS学习总结 四 软件定时器 软件计时器由FreeRTOS内核实现 xff0c 并在其控制之下 它们不需要硬件支持 xff0c 也与硬件计时器或硬件计数器无关 软件计时器功能是可选的 要使用软件计时器功能 xff1a 1 构建F
  • 网络编程及三大协议(TCP + UDP + Http)

    网络编程及三大协议 xff08 TCP 43 UDP 43 Http xff09 一 网络编程 1 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备 xff0c 通过通信线路连接起来 xff0c 在网络操作系统 xff0
  • 仿真软件GCKontorl之软件在环(SiL)仿真

    摘要 xff1a 软件在环SiL Software in the Loop 仿真 xff0c 是将仿真工程中的某些仿真模型或控制策略 xff0c 采用写手代码替代 xff0c 完成软件在环 SiL 的仿真测试及验证 特别是C语言在嵌入式系统
  • [数学建模]数学建模算法和模型(B站视频)(一)

    数学建模 数学建模算法和模型 xff08 B站视频 xff09 xff08 一 xff09 层次分析法 层次分析法 xff0c 简称AHP xff0c 是指将与决策总是有关的元素分解成目标 准则 方案等层次 xff0c 在此基础之上进行定性
  • 决策树的各类概述

    LogisticRegression 1 决策树的前世今生1 1 什么是决策树1 2 决策树的构建1 3 sklearn中使用决策树 2 决策树的特征选择2 1 信息论相关概念2 2 信息熵2 3 条件熵2 4 信息增益2 5 信息增益率2
  • 事件流及其三阶段

    事件流 1 事件的捕获阶段 2 事件的目标阶段 3 事件的冒泡阶段 事件有三个阶段 xff0c 首先发生的是捕获阶段 xff0c 然后是目标阶段 xff0c 最后才是冒泡阶段 xff0c 对于捕获和冒泡 xff0c 我们只能干预其中的一个

随机推荐

  • 卡尔曼滤波

    这篇文章完全是我自己为了记录一下自己对于KF的印象 xff0c 表层的不能再表层了 如果是需要详细了解KF的请去阅读高手的文章 xff0c 不要在此篇上浪费时间 前言 xff1a 在读一些文章的时候 xff0c 总会看到研究方法基于卡尔曼滤
  • Nvidia Jetson TX2入门指南(白话版)

    最近要用到jetson tx2 xff0c 但之前也完全没有接触过 边用边学 xff0c 这篇文章就是向新手介绍下jetson tx2刚入手的一些事项 适合纯小白 一 TX2初认识 开发板全称 xff1a Nvidia Jetson tx2
  • Nvidia Jetson TX2+Intel Realsense D435i跑ORB_SLAM3

    前言 xff1a 网上的教程实在是太多 xff0c 从诸多教程中找到一个适合自己的实属不易 将此记录下来 xff0c 希望能够帮助到有需要的人 因为时间紧迫 xff0c 没时间写特别详细的内容 xff0c 只能引用一些他人的步骤 请见谅 x
  • catkin_make

    普通情况下编译文件都是使用cmake make工具 xff0c 与此有关的内容可以参考 xff1a cmake CMakeLists txt make makefile的关系 但ROS中还有catkin make xff0c 不清楚他们之间
  • Airsim仿真

    Airsim设计的目的 xff1a 1 现实世界开发测试自动驾驶车辆算法费时费力 2 迎合AI的发展 xff0c 需要在各种条件下和环境下收集大量带注释训练数据 模块化设计 xff0c 强调可扩展性 提供很多API xff0c 核心组件包括
  • 0404---通过SSH连接远程服务器运行图形界面程序问题

    远程运行 linux 服务器图形界面程序问题 通常部署在数据中心机房中的服务器是没有图形桌面的 xff0c 对服务器的日常运维也往往通过远程客户端命令窗口来进行 xff0c 但有时候往往需要在服务器上远程安装或运行图形窗口类软件 xff0c
  • Jetson NX emmc版本系统转移到SSD

    因emmc版本的NX自带内存不够大 xff0c 只有16GB xff08 手上的是这个型号 xff09 xff0c 安装系统大概需要除去4G多内存 xff0c 再安装CUDA cuDNN TensorRT等内存直接爆满 无法继续使用 所以需
  • ssh远程登录报错:kex_exchange_identification: Connection closed by remote host

    基本信息 系统 xff1a MacOS Catalina 10 15 7 报错信息 xff1a 终端登录远程 服务器 时报错 xff1a kex exchange identification Connection closed by re
  • 如何在Windows的cmd下让程序在后台执行

    如何在Windows的cmd下让程序在后台执行 xff1f Hu Dennis 2008 12 24 在windows下启动JBoss服务器 xff0c 需要在命令行中输入run bat 但是运行后如果你想停止服务器 xff0c 可能的做法
  • 嵌入式LINUX识别U盘的问题

    我试过mount U盘 当开机后mount 第一个U盘时 xff0c 一般设备名为sda xff0c 然后umount xff0c 并重插另外一个U盘 xff0c 再mount xff0c 发现设备名变为sdb了 此试验进行了几次 xff0
  • yolov4+deepsort(yolo目标检测+自适应卡尔曼滤波追踪+毕业设计代码)

    项目介绍 该项目一个基于深度学习和目标跟踪算法的项目 xff0c 主要用于实现视频中的目标检测和跟踪 该项目使用了 YOLOv4 目标检测算法和 DeepSORT 目标跟踪算法 xff0c 以及一些辅助工具和库 xff0c 可以帮助用户快速
  • 集成学习(含常用案列)

    集成学习原理 xff1a 工作原理是生成多个分类器 模型 xff0c 各自独立地学习和作出预测 这些预测最后结合成组合预测 xff0c 因此优于任何一个单分类的做出预测 集成学习算法分类 xff1a 集成学习算法一般分为 xff1a bag
  • 字节序与比特序详解

    字节序的定义 几种类型的字节序 cpu字节序外部bus字节序设备字节序网络协议字节序 Ethernet协议字节序IP协议字节序 编译字节序 比特序的定义字节序与bit序的转换结构体的位域 字节序的定义 字节序就是说一个对象的多个字节在内存中
  • 【动态规划】01背包问题

    问题描述 有n个物品 xff0c 它们有各自的体积和价值 xff0c 现有给定容量的背包 xff0c 如何让背包里装入的物品具有最大的价值总和 xff1f 为方便讲解和理解 xff0c 下面讲述的例子均先用具体的数字代入 xff0c 即 x
  • 献给初学labview数据采集的初学者

    前言 xff1a 参考来源 xff1a http bbs elecfans com jishu 209658 1 5 html xff0c 感谢原作者 zhihuizhou 这里的内容只针对NI的数据采集卡 xff0c 不保证适用于其它公司
  • 如何从科学论文中实现一个算法

    原文 xff1a http codecapsule com 2012 01 18 how to implement a paper 作者 xff1a Emmanuel Goossaert 本文是从科学论文中实现算法的简短指南 我从书籍和科学
  • 国内C/C++刷题网站汇总

    作者 xff1a Luau Lawrence 链接 xff1a https www zhihu com question 25574458 answer 31175374 来源 xff1a 知乎 Welcome To PKU JudgeOn
  • 华为16道经典面试题

    面试过程中 xff0c 面试官会向应聘者发问 xff0c 而应聘者的 回答将成为面试官考虑是否接受他的重要依据 对应聘者而言 xff0c 了解这些问题背后的 猫腻 至关重要 本文对面试中经常出现的一些典型问题进行了整理 xff0c 并给出相
  • 语音信号的预加重和加窗处理

    原文转载于 xff1a http blog csdn net ziyuzhao123 article details 12004603 非常感谢 一 语音信号的预加重 语音信号的预加重 xff0c 目的是为了对语音的高频部分进行加重 xff
  • 单独编译和使用webrtc音频增益模块(AGC)

    原文转载于 xff1a http www cnblogs com mod109 p 5767867 html top 非常感谢 webrtc的音频处理模块分为降噪ns xff08 nsx xff09 xff0c 回音消除aec xff08