使用 PulseAudio 实时降噪?

Vad*_*kin 125 sound pulseaudio noise

是否可以使用 PulseAudio 进行实时噪声去除,从而使输出的声音更流畅?

Lui*_*ado 168

脉冲音频模块 module-echo-cancel

我开始阅读大量有关 PulseAudio 和“隐藏”选项的文章,以便找到与此问题类似的选项。我发现的一个是噪音消除模块,它可以显着降低麦克风上的任何静态噪音,甚至是大量的背景噪音,基本上让您可以只录制自己的高质量声音(对于音频录制)例如)。为此,请按照以下步骤操作:

  1. sudo nano /etc/pulse/default.pa

  2. 在文件的任何位置添加以下行,但我建议几乎在最后您会找到关于回声消除内容的评论(~第 140 行):

    load-module module-echo-cancel
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重新加载 PulseAudio ( pulseaudio -k) 或简单地重新启动计算机。您应该能够从输入设备部分选择新的降噪选项:

    截屏

您可以在回声消除模块页面上找到有关它的更多信息

将输入设置为默认值

如果您希望将回声消除设备设置为默认值,只需将上述行转换为:

load-module module-echo-cancel source_name=logitechsource
Run Code Online (Sandbox Code Playgroud)

然后在文件底部添加

set-default-source logitechsource
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我将 source 命名为 source logitechsource,但您可以随意命名它,只需重新启动pulseaudio即可。

重命名设备

最后,如果您不想在声音设置中使用超长名称(当您想选择输入/输出设备时)。我的建议是像这样重命名输入设备:

load-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD
Run Code Online (Sandbox Code Playgroud)

再次,重新启动pulseaudio。最终结果如下所示:

截屏

更新 -在这里找到完整的文档感谢clément

  • 如果你想避免echo模块自动调整音量滑块,你可以按照https://gitlab.freedesktop设置`load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"` .org/pulseaudio/pulseaudio/issues/224 (13认同)
  • 容易做,似乎不会破坏东西 - 谢谢! (8认同)
  • 编辑`~/.config/default.pa` 不是更合适吗? (4认同)
  • 您还可以使用 `pactl load-module module-echo-cancel` 临时加载模块 (3认同)
  • 优秀的解决方案,为我开箱即用,谢谢 (2认同)
  • 完整文档在这里,如果您想选择自定义源或接收器或查看其他选项:https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#module-echo-cancel (2认同)
  • 将`module-echo-cancel` 添加到脉冲音频使我的声音在录音中听起来略带金属感。它确实消除了一些背景噪音,但不是全部。 (2认同)
  • @BipedalShark 的建议很好,但由于用户的配置将覆盖系统的配置,因此您需要使用“.include /etc/pulse/default.pa”在文件顶部获取默认配置。感谢[这个很棒的答案](https://askubuntu.com/a/446552/69691)。另外,我在 `~/.config/pulse/default.pa` 中编写了我的配置。 (2认同)

cem*_*r93 17

这是一个老问题,但我遇到了同样的问题,经过一些谷歌搜索(我发现大多数人都同意这是不可能的)并阅读了一些手册页,我现在已经根据 user2330377 的想法开发了一个解决方案。

首先,您需要为 SoX 创建噪声配置文件。只需使用任何录音程序记录几秒钟的噪音,然后cd进入您保存它的目录并执行sox noise.wav -n noiseprof noise.prof

然后你需要创建一个 ALSA 环回设备:

sudo modprobe snd_aloop
Run Code Online (Sandbox Code Playgroud)

这是必需的,因为pulseaudio 与Jack 不同,不能直接将音频软件连接在一起;因此,我们将使用环回设备作为代理。

现在您需要开始paman并找到您的麦克风(或其他录音设备)和我们刚刚创建的回送设备的名称。找到这些后,您可以执行以下命令开始从麦克风录制声音,通过 SoX 进行管道传输,然后在回送设备上播放:

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
Run Code Online (Sandbox Code Playgroud)

(您需要为 -d 参数替换正确的设备名称——第一个 pacat 调用的输入设备和第二个调用的环回设备输出。)

好了,快完成了!最后一步,使用您选择的应用程序开始录制声音,然后启动pavucontrol,切换到“录制”选项卡并将用于录制的音频设备(显示为右侧的灰色按钮)设置为“环回音频监视器”设备”。您现在应该拥有清晰无噪音的录音!


小智 7

在 ubuntu LTS 或基于 debian 的发行版上有如此简单的解决方案,这是一个在线脚本,可以激活脉冲音频(debian 上的默认音频)中已有的噪声消除功能。

wget -qO - https://gist.githubusercontent.com/grigio/cb93c3e8710a6f045a3dd9456ec01799/raw/94f07c7d75bcf5dd9b08a9c3034844223ec6fbe1/fix-microphone-background-noise.sh | sudo bash && pulseaudio -k
Run Code Online (Sandbox Code Playgroud)

您还可以在 secsetion 中运行这些命令(它们是同一件事)

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
Run Code Online (Sandbox Code Playgroud)


sam*_*zad 5

我在 Arch Linux 中使用NoiseTorch ,易于使用且易于安装 => NoiseTorch Github 链接 在此输入图像描述