Ubuntu开启麦克风降噪功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、pulseaudio是什么?
  • 二、module-echo-cancel
  • 三、声卡
  • 四、开启降噪
    • 1.内置声卡
    • 2.外置声卡
    • 3.其它设置
  • 五、配置持久化
  • 六、给些建议
  • 总结


前言

最近有个项目需要使用到麦克风,研究起来才发现其中的门道那是相当多。平常我们使用麦克风都是基于Windows系统居多,Ubuntu上以我目前的研究阶段基本上觉得有声音的程度吧。今天基于Ubuntu-18.04~Ubuntu-22.04这个跨度的系统都能用,其它的请自测。


一、pulseaudio是什么?

PulseAudio is a sound server system for POSIX OSes, meaning that it is a proxy for your sound applications. It is an integral part of all relevant modern Linux distributions and is used in various mobile devices, by multiple vendors. It performs advanced operations on sound data as it passes between your application and hardware. Things like transferring audio to a different machine, changing the sample format or channel count, or mixing several sounds into one input/output, are easily achieved using PulseAudio.

简而言之:至少Ubuntu-18.04就有了,22.04还在用

二、module-echo-cancel

这个是pulseaudio的一个module,从1.0版本就添加了。理解为在你和音源之间的一个模块,负责将从音源拿来的声音进行处理(降噪)之后提供给你。

三、声卡

一般来讲台式机或笔记本都至少集成一个声卡(内置声卡),刀片服务器可能没有声卡(几乎用不到)。如果你的PC上有麦克风和外放(扬声器)的话那么就是接到这个声卡上的。如果你的PC有一个3.5mm耳机孔的话,那它大概率也是接到这个声卡上的。除非你另外接了一个声卡(外置声卡)。

四、开启降噪

我的系统用到了3个麦克风,情况更复杂些,所以我分情况来说。

1.内置声卡

没有额外接声卡的时候,你使用的是内置麦克风。这个时候设置不用额外指定声卡,绑定的是默认声卡。

不能使用root权限,必须使用普通用户,你登陆桌面的那个用户

pactl load-module module-echo-cancel aec_method=webrtc source_name=mic source_properties=device.description=MicHD

成功返回index,失败返回错误信息

成功返回一个index,这里我们不用index,因为这个index重启之后可能会变。

注意:不需要重启电脑,执行之后模块加载进内存。

打开settings->sound->Input,下拉框出现一个MicHD,选中MicHD就完成了降噪设置。这个时候你再用麦克风录音就会发现对环境噪声进行了一定程度的抑制并不是没有了噪声

在这里插入图片描述

2.外置声卡

上面的方法没有指定声卡。如果我想对指定的声卡使用降噪怎么办呢?

不能使用root权限,必须使用普通用户,你登陆桌面的那个用户

pactl load-module module-echo-cancel source_master=<声源名字> aec_method=webrtc source_name=mic source_properties=device.description=MicHD

成功返回index,失败返回错误信息

那么,这个生源名字怎么获得呢?

用pactl显示plug的设备

pactl list sources

在这里插入图片描述
红框里的就是声源名字,不同的生源名字不一样,一般都是唯一的。

注意:怎么找到想要的那个声源名字呢?你可以先拔掉外置声卡看一下,再插上看一下,找到差异。

3.其它设置

上面介绍的是默认的降噪方法,还有很多附加的设置,这里提一下:

source_name:给你的降噪配置起一个名字,需要唯一性(上面的是mic,可以起其它名字)
source_properties:这个我还在研究,上面的device.description是在UI里显示的名字
source_master:指定需要降噪的声源,上面图片红框里的那个Name字段
sink_name:sink是外放(扬声器)的意思,字面上可以对外放降噪,我没试过不知道啥效果
sink_properties:外放附加属性,没研究
sink_master:指定需要降噪的外放(扬声器)
use_volume_sharing:没用过,难道是外放和麦克风音量同步?
format:声音格式诸如s16le、s16be等等,根据个人需要设置
rate采样率,越高声音还原度越好,理论上不能超过设备的最高采样率,设置过高可能失败
channels声道数,1:单声道;2:双声道(立体声)
channel_map:声道集合,看上面的图片里的字段(双声道:front-left,front-right,单声道:mono)
use_master_format:套用设备的格式比如上图的Name字段
aec_method:AES实现方法,Ubuntu-22.04支持几种(“speex”, “webrtc”,“adrian”,“null”)
aec_args:和aec_method配合使用的字段,自行研究官方文档
mic_geometry:利用麦克风阵列实现波束成形,这个比较复杂,自行研究官方文档
target_direction:和mic_geometry配合使用的字段,自行研究官方文档
save_aec:在/tmp下面生成aec_*文件,里面存放aec的data

五、配置持久化

上面的通过pactl命令行实现的重启电脑就没了,如果想要持久化有两种方法:第一种写一个shell开机启动,第二种就是写在pulse的配置文件里。

sudo cp /etc/pulse/default.pa /etc/pulse/default.pa.bak

在/etc/pulse/default.pa最下面加上以下几句话:
#Active Noise Removal
.ifexists module-echo-cancel.so
load-module module-echo-cancel aec_method=webrtc source_name=mic source_properties=device.description=MicHD
set-default-source "mic"
.endif

注意:除了不用pactl其它配置差不多,根据需要自行添加

六、给些建议

前前后后研究了不下于2个星期,虽说没有研究透,也不是没有一点收获。下面就是我给真的有麦克风使用场景的小伙伴的建议:

1、如果你对噪声很敏感优先选动圈麦,动圈麦对背景噪声不敏感(相对电容麦),比较适合外部环境相对嘈杂,对人声要求比较高的场景;而电容麦比动圈麦更敏感,很多背景噪声会更轻易地录制进去。

2、嘈杂环境下,动圈麦比电容麦能更好地捕捉人声。电容麦更适合录音棚那种安静的场合。

3、人离麦克风地距离不应该太远,太远地话能量会衰减

4、好多配套地调音软件没有Linux版,要求高地话选Windows吧!


总结

1、真实的麦克风比上面说的要复杂,感兴趣的可以深入研究下
2、仅仅借助现有的软件和配置总是比Windows差点意思,好多软件Linux上也不支持
3、如果要实现更好的效果可能要自己动手开发降噪算法,要不然就只能在Windows上鼓捣了,也能节省很多时间成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3568笔记二十:PP-YOLOE部署测试

若该文为原创文章&#xff0c;转载请注明原文出处。 注&#xff1a;转换测试使用的是Autodl服务器&#xff0c;CUDA11.1版本&#xff0c;py3.8。 一、PP-YOLOE环境安装 创建环境 # 使用 conda 创建一个名为 PaddleYOLO 的环境&#xff0c;并指定 python 版本conda create -n…

day15-maven高级

1. 分模块设计与开发 步骤 创建 maven 模块 tlias-pojo&#xff0c;存放实体类。创建 maven 模块 tlias-utils&#xff0c;存放相关工具类。 <dependency><groupId>com.itheima</groupId><artifactId>tlias-pojo</artifactId><version>1.0…

(vue)新闻列表与图片对应显示,体现选中、移入状态

(vue)新闻列表与图片对应显示&#xff0c;体现选中、移入状态 项目背景&#xff1a;郑州院XX项目首页-新闻展示模块&#xff0c;鼠标移入显示对应图片&#xff0c;且体现选中和移入状态 首次加载&#xff1a; 切换列表后&#xff1a; html: <el-row :gutter"20"…

glibc内存管理ptmalloc

1、前言 今天想谈谈ptmalloc如何为应用程序分配释放内存的&#xff0c;基于以下几点原因才聊它&#xff1a; C/C 70%的问题是内存问题。了解一点分配器原理对解决应用程序内存问题肯定有帮助。C也在用ptmalloc. 当你在C中new一个对象时&#xff0c;底层还是依赖glibc中的ptma…

jmeter的函数助手使用方法

如某个上传文件接口&#xff0c;一个文件只能同时被一个接口调用&#xff0c;如果被并发同时调用就会报错 创建多个测试文件 比如50并发&#xff0c;创建更多的文件防止并发多时随机数生成重复 生成随机数函数 工具–函数助手-选择random-输入范围&#xff08;1-696&#…

vue3父子通信、跨层通信

子传父 通过 ref标识 获取真实的 dom对象或者组件实例对象 父组件获取子组件内部属性和方法 顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 非响应式数据父修改不了子的内容 子组件调用父组件方法

若依微服务跑起来-微服务小白入门(1)

背景 若依的基本框架系列&#xff0c;已经构建起来&#xff0c;请参照 小白入门系列 - 鸡毛掸子 这些东西理解&#xff0c;并且实际板砖以后&#xff0c;有必要对现在流行的一些概念做一些升级&#xff0c;现在我们就进入到所谓的cloud版本&#xff0c;其实&#xff0c;前面的…

【C++】多态 (上)

在实际生活中我们也经常见到多态的例子&#xff0c;多态就是不同的对象完成同一个行为时会产生不同的状态&#xff0c;比如成人和儿童购票就是不一样的&#xff0c;多态是可以基于继承的&#xff0c;我们本篇博客的多态就是基于继承的&#xff0c;下面我们先看一个简单例子 cla…

JsonUtility.ToJson 和UnityWebRequest 踩过的坑记录

项目场景&#xff1a; 需求&#xff1a;我在做网络接口链接&#xff0c;使用的unity自带的 UnityWebRequest &#xff0c;数据传输使用的json&#xff0c;json和自定义数据转化使用的也是unity自带的JsonUtility。使用过程中发现两个bug。 1.安全验证失败。 报错为&#xff1a…

.NET Framework 服务实现监控可观测性最佳实践

环境信息 系统环境&#xff1a;Windows Server开发语言&#xff1a;.NET Framework > 4.6.1APM探针包&#xff1a;ddtrace 准备工作 安装 Datakit 主机部署&#xff1a; 主机安装 - 观测云文档 打开采集 APM 采集器 Windows 主机配置 # 到如下路径&#xff0c;把ddtr…

Spring常用设计模式-实战篇之单例模式

实现案例&#xff0c;饿汉式 Double-Check机制 synchronized锁 /*** 以饿汉式为例* 使用Double-Check保证线程安全*/ public class Singleton {// 使用volatile保证多线程同一属性的可见性和指令重排序private static volatile Singleton instance;public static Singleton …

VUE中添加视频播放功能

转载https://www.cnblogs.com/gg-qq/p/10782848.html 常见错误 vue-video-player下载后‘vue-video-player/src/custom-theme.css‘找不到 解决方法 卸载原来的video-play版本 降低原来的版本 方法一 npm install vue-video-player5.0.1 --save 方法二 或者是在pack.json中直…

huggingface的transformers训练gpt

目录 1.原理 2.安装 3.运行 ​编辑 4.数据集 ​编辑 4.代码 4.1 model init​编辑 forward&#xff1a; 总结&#xff1a; 关于loss和因果语言模型&#xff1a; ​编辑 交叉熵&#xff1a;​编辑 记录一下transformers库训练gpt的过程。 transformers/examples/…

使用 Amazon SageMaker 微调 Llama 2 模型

本篇文章主要介绍如何使用 Amazon SageMaker 进行 Llama 2 模型微调的示例。 这个示例主要包括: Llama 2 总体介绍Llama 2 微调介绍Llama 2 环境设置Llama 2 微调训练 前言 随着生成式 AI 的热度逐渐升高&#xff0c;国内外各种基座大语言竞相出炉&#xff0c;在其基础上衍生出…

MIT的研究人员最近开发了一种名为“FeatUp”的新算法,这一突破性技术为计算机视觉领域带来了高分辨率的洞察力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

vuecli创建vue3项目

第一步&#xff1a; 在文件夹中输入 vue create xxx 第二步&#xff1a; 勾选下面带有*号的&#xff0c;经验最好把Linter/Formatter勾掉&#xff0c;不然会出现eslint报错 第三步&#xff1a; 选择3.x 第四步&#xff1a; 意思为是否用history模式来创建路由&#xff0…

mineadmin前端安装启动

在上一篇文章中&#xff0c; 我们已经搭建好了后端环境并启动 mineadmin 快速安装部署&#xff08;docker环境&#xff09; 一、下载前端项目 1、在搭建后端时候&#xff0c;使用php bin/hyperf.php mine:install 的时候&#xff0c;有一个步骤是安装前端项目的。安装目录为&a…

【有源码】buildroot根文件系统编译和常见问题

前言 编译好的含有QT5等工具包的buildroot根文件 仓库&#xff1a;https://gitee.com/wangyoujie11/atkboard_-linux_-driver 编译过程如下 1.下载源码&#xff0c;解压tar -vxjf xxx.tar.bz2 https://buildroot.org/ 这里以如下版本实验 2.在解压之后的buildroot-2019.02.…

智慧公厕的系统构成与功能解析

智慧公厕系统是通过传感器和云平台相结合的创新技术&#xff0c;旨在提供更好的公厕管理与服务。智慧公厕从系统的构成来看&#xff0c;主要分为感知层&#xff08;数据收集&#xff09;、传输层&#xff08;数据传输&#xff09;、平台层&#xff08;数据处理&#xff09;和应…

【vue-小知识】var、let 和 const之间的区别

文章目录 结论1、重复定义变量名var&#xff1a;允许重复定义变量名let和const&#xff1a;不可以重复定义变量名 2、修改值var&#xff1a;允许修改值let&#xff1a;允许修改值const&#xff1a;不允许修改值&#xff0c;会报错 3、变量提升var : 支持变量提升let和const&…