module-echo-cancel
我开始阅读关于PulseAudio和它的“隐藏”选项的大量资料,以便找到一个与这个问题类似的选项。我找到了噪音消除模块,它可以显著降低麦克风上的任何静音,并且甚至可以减少大部分背景噪音,基本上只录制您自己的声音,并具有出色的音质(例如用于音频录制)。要做到这一点,请按照以下步骤操作:
sudo nano /etc/pulse/default.pa
在文件的任何位置添加以下行,但我建议将其放在接近末尾的地方,您会在那里找到有关回声消除的注释(大约在第140行附近):
load-module module-echo-cancel
重新加载PulseAudio(pulseaudio -k
)或者简单地重新启动计算机。您应该能够从输入设备部分选择新的噪音消除选项:
你可以在回声消除模块页面上找到更多相关信息。
如果你希望将回声消除设备设为默认, 只需将上述行改为:
load-module module-echo-cancel source_name=logitechsource
set-default-source logitechsource
logitechsource
,但您可以根据需要自行命名,并简单地重新启动pulseaudio。
最后,如果您不希望在声音设置中有一个超长的名称(当您想要选择输入/输出设备时),我的建议是像这样重命名输入设备:
load-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD
再次启动pulseaudio。最终结果看起来像这样:
更新 - 完整文档在此处找到 感谢clémentload-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"
。 - joelostblompactl
)回声消除功能,我想在播放在教堂录制的音频文件时使用。 - Henk Poleypactl load-module module-echo-cancel
临时加载模块。 - Madacol~/.config/default.pa
编辑会更合适,不是吗? - BipedalSharkmodule-echo-cancel
添加到脉冲音频中会使我的声音在录音中听起来略带金属质感。它确实能消除一些背景噪音,但并非全部。 - Paul Rougieux.include /etc/pulse/default.pa
引用默认配置文件。谢谢这个精彩的回答。此外,我将我的配置写在 ~/.config/pulse/default.pa
中。 - Sufianload-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD
不起作用。 - Rajesh Chaudharyaec_args="analog_gain_control=0\\ digital_gain_control=1"
才能使其正常工作。 - joelostblompulseaudio -k
才能看到带有降噪功能的麦克风。如何解决这个问题? - FreePhoenixsudo modprobe snd_aloop
pacat -r -d alsa_input.pci-0000_00_14.2.analog-stereo --latency=1msec|sox -b 16 -e signed -c 2 -r 44100 -t raw - -b 16 -e signed -c 2 -r 44100 -t raw - noisered noise.prof 0.2|pacat -p -d alsa_output.2.analog-stereo --latency=1msec
(在-d参数中,您需要替换正确的设备名称--第一个pacat调用的输入设备和第二个的回环设备输出。)
好了,快完成了!作为最后一步,使用您选择的应用程序开始录制声音,然后启动pavucontrol
,切换到"Recording"选项卡,并将用于录制的音频设备(显示为右侧的灰色按钮)设置为"Loopback Audio Device的Monitor"。现在,您应该有一个清晰且无噪音的录音!
wget -qO - https://gist.githubusercontent.com/grigio/cb93c3e8710a6f045a3dd9456ec01799/raw/94f07c7d75bcf5dd9b08a9c3034844223ec6fbe1/fix-microphone-background-noise.sh | sudo bash && pulseaudio -k
sudo cp /etc/pulse/default.pa /etc/pulse/default.pa.bak
sudo cat <<EOT >> /etc/pulse/default.pa
load-module module-echo-cancel source_name=noechosource sink_name=noechosink
set-default-source noechosource
set-default-sink noechosink
EOT
/etc/pulse/default.pa.bak
找到它,所以答案是:将/etc/pulse/default.pa
文件移动到其他地方(以防万一,这又是一个备份),然后将/etc/pulse/default.pa.bak
重命名为/etc/pulse/default.pa
。 - konrados关于噪音消除,模块文档页面上没有任何信息。只有模块-回声消除中包含了AEC(声学回声消除)算法,它有几种实现方式,比如webrtc | speex。
因此,尽可能购买带有集成噪音消除功能的耳机|麦克风。
在我测试Ubuntu上的语音录制时,我发现了一些特定的特点:
Skype、Telegram使用默认设备的原始输入(在我的情况下是前置麦克风|后置麦克风插孔)。如果你需要在这些应用程序中消除噪音,你应该只购买带有集成噪音消除功能的耳机|麦克风
如果你需要在浏览器中进行语音通话,那么你应该记住浏览器有自己的语音处理算法实现,例如WebRTC。
此外,网络应用程序(如talky、hangouts、appear.in等网站)可以有自己的语音处理算法实现,尽管它们可能基于webrtc hangout-analysis
bin/ladspa/librnnoise_ladspa.so
到/usr/local/lib/librnnoise_ladspa.so
或其他任何位置。
3. 使用pactl list sources short
找出您的输入设备的名称。例如,我的麦克风被称为alsa_input.usb-046d_0994_4A365E20-02.mono-fallback
。
4. 运行以下命令以激活降噪功能(在运行之前,请将/usr/local/lib/librnnoise_ladspa.so
和alsa_input.usb-046d_0994_4A365E20-02.mono-fallback
替换为步骤2和3中确定的值): pacmd load-module module-null-sink sink_name=mic_denoised_out
pacmd load-module module-ladspa-sink sink_name=mic_raw_in \
sink_master=mic_denoised_out label=noise_suppressor_mono \
plugin=/usr/local/lib/librnnoise_ladspa.so \
control=50
pacmd load-module module-loopback \
source=alsa_input.usb-046d_0994_4A365E20-02.mono-fallback \
sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true
pacmd load-module module-remap-source source_name=denoised \
master=mic_denoised_out.monitor channels=1
Null output
或Remapped monitor of null output
的音频输入,并进行测试(我使用了Skype Echo)。/etc/pulse/default.pa
中,省略每行开头的pacmd
。module-echo-cancel
中包含了AEC(声学回声消除)算法,它有几种实现方式,比如webrtc | speex。 - vskubrievhttp://wiki.gentoo.org/wiki/PulseAudio
webrtc-aec 是一种使用webrtc.org AudioProcessing库的技术,可以在支持该技术的应用程序中极大地增强VoIP通话质量,实现声学回声消除、模拟增益控制、降噪和其他处理功能。pipewire
而不是pulseaudio
(例如PopOS 22.04+),你可以通过以下步骤创建一个回声消除的音频源/麦克风:
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/pipewire.conf
(如果目录不存在,请创建)。
将this snippet from the docs添加到活动模块中,以便在pipewire.conf
中有以下内容:
context.modules = [
# ... 这里加载了很多其他模块
{ name = libpipewire-module-echo-cancel
args = {
# library.name = aec/libspa-aec-webrtc
# node.latency = 1024/48000
source.props = {
node.name = "Echo Cancellation Source"
}
sink.props = {
node.name = "Echo Cancellation Sink"
}
}
}
]
重新启动pipewire:systemctl --user restart pipewire.service
sudo nano /etc/pulse/default.pa
## add below code on bottom
### Enable Echo/Noise-Cancelation
load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink
set-default-source echoCancel_source
set-default-sink echoCancel_sink
### 2nd tips
.ifexists module-echo-cancel.so
load-module module-echo-cancel aec_method=webrtc source_name=echocancel sink_name=echocancel1
set-default-source echocancel
set-default-sink echocancel1
.endif