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

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

降噪有两部分代码,一套是定点算法(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源码里面有对应的接口使用者可以去查。

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

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

java webrtc ns降噪_单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)...相关推荐

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

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

  2. Java:实现找到一般形式的直线与圆的交点算法(附完整源码)

    Java:实现找到一般形式的直线与圆的交点算法 package com.williamfiset.algorithms.geometry;import static java.lang.Math.*; ...

  3. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  4. 视频教程-物联网之java实现(springboot + netty + 心跳,附完整源码)-Java

    物联网之java实现(springboot + netty + 心跳,附完整源码) 10年的软件行业从业经验,熟悉java开发.java 架构.微服务.自动化高级运维.压力测试等. 林忠明 ¥200. ...

  5. C/C++游戏项目:编译重温小霸王经典超级玛丽教程(附注释源码)

    超级玛丽全名<超级马里奥兄弟>,是任天堂公司出品的著名横版过关游戏,超级玛丽游戏最早在红白机上推出,有多款后续作品.提到<超级玛丽>想必没有人不知道吧?这个系列已经是任天堂的招 ...

  6. java实现大富翁游戏(附完整源码)

    java实现大富翁游戏 以下是 Java 实现大富翁游戏的完整源码: import java.util.Random; import java.util.Scanner;public class Mo ...

  7. java实现军旗游戏(附完整源码)

    java实现军旗游戏 以下是Java实现军旗游戏的完整源码: import javax.swing.*; import java.awt.*; import java.awt.event.MouseA ...

  8. java 教室借用管理系统_[内附完整源码和文档] 基于JAVA语言的学生选课信息管理系统...

    摘 要 本系统运用Java面向对象的方法设计而成. 近年来,学生选课系统越来越在高校学生群体中得到普及,其所承担的功能也变得越来越丰富,所起到的作用也变得越来越重要,在被学校学生重视的同时,也意味着它 ...

  9. java sql进销存_[内附完整源码和文档] 基于Java和Sql Server 2008的陶瓷工厂进销存管理系统...

    摘 要 时代在进步,我们的生产生活方式当然也要相对应的做出改变了.在今天这样一个信息化的时代,计算机软件已经广泛的被用于日常的办公,仓库的库存管理,企业的人员以及资产管理,文字的编辑处理,电子表格的广 ...

最新文章

  1. LDAP(轻量目录存取协议)
  2. ​脑机技术可以应用于军事领域,有助于评估士兵的认知状态
  3. python大数据分析实例-python大数据分析代码案例
  4. struts2和springmvc的区别
  5. leetcode743. 网络延迟时间(迪杰斯特拉算法)
  6. java   cxf实现webservice接口方式之不依赖spring
  7. 时间都去哪儿了之Python程序测试与优化
  8. TCP粘包和拆包的定义,产生的原因以及解决方案
  9. python实现一个简单的图片浏览器
  10. WLAN定义和基础架构
  11. rootkit 后门检查工具 rkHunter安装使用
  12. Android图片剪裁库:uCrop
  13. 安卓原生系统_体验类原生安卓系统PixelExperience流畅得不像话
  14. 微信公众号引流的十种方法
  15. 西瓜视频下载软件有吗
  16. 结合实战,浅析GB/T28181(七)—— 球机云台控制
  17. MATLAB算法实战应用案例精讲-【人工智能】枝晶生长模型(附matlab代码实现)
  18. 前端面试题总结【持续更新···】
  19. 解决Office 打开Excel 空白问题
  20. 实验内容:实验六 数组冒泡排序

热门文章

  1. Flume实操(二)【实时读取本地文件到HDFS案例】
  2. kafka消费速度跟不上生产速度的解决方案!
  3. Collection和Map中易考的一些知识点
  4. 牛客网_PAT乙级1007_A除以B (20)
  5. 使用ExecutorService来停止线程服务
  6. Spring5参考指南:依赖注入
  7. 2pc_two phase commit详情
  8. 洛谷——P1605 迷宫
  9. Promise第三篇:async和await关键字
  10. 【解析】UVA-548 Tree