Pulseaudio 模块module-echo-cancel

Pulseaudio 模块module-echo-cancel

是否可以使用 PulseAudio 进行实时消除噪音,以便输出的声音更加平滑?

答案1

Pulseaudio 模块module-echo-cancel

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

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

  2. 在文件的任何位置添加以下行,但我建议几乎在最后找到有关回声消除内容的注释(〜第 140 行):

    load-module module-echo-cancel
    
  3. 重新加载 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。最终结果如下:

截屏

更新-完整文档发现于此处谢谢克莱门特

答案2

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

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

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

sudo modprobe snd_aloop

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

现在您需要启动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

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

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

答案3

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

wget -qO - https://gist.githubusercontent.com/grigio/cb93c3e8710a6f045a3dd9456ec01799/raw/94f07c7d75bcf5dd9b08a9c3034844223ec6fbe1/fix-microphone-background-noise.sh | sudo bash && pulseaudio -k

您也可以在 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

答案4

模块文档页面上没有关于噪音消除的任何信息。 module-echo-cancel 中只有 AEC(声学回声消除)算法,它有几种实现,例如 webrtc | speex。

因此,您应该尽可能购买具有集成噪音消除功能的耳机|麦克风。

当我在 Ubuntu 中测试录音时,我发现了一些特殊的品质:

  • Skype、Telegram 使用默认设备的原始输入(在我的情况下是前置麦克风插孔)。如果您需要消除此应用中的噪音,则应仅购买具有集成噪音消除功能的耳机/麦克风

  • 如果您需要在浏览器中使用语音通话,那么您应该记住浏览器有自己的语音处理算法实现,例如 WebRTC。

  • 此外,Web 应用程序(talky、hangouts、appear.in 等网站)也可以拥有自己的语音处理算法实现,尽管它们可以基于 webrtc聚会场所分析

相关内容