使用PulseAudio实时消除噪声?


65

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


尽管可能会很费力,并且可能需要有人为此编写一个过滤器,但这可能是可能的。
RolandiXor

2
@Vadi-我添加了一个答案,如果您仍在使用Ubuntu或任何其他基于PulseAudio的Distro,它可能会对您有所帮助。希望它对您的伙伴有用。
路易斯·阿尔瓦拉多

这篇文章似乎在做类似的事情
akhmed '16

Answers:


74

Pulseaudio模块 module-echo-cancel

我开始阅读很多有关PulseAudio及其“隐藏”选项的信息,因此我可以找到与该问题类似的选项。我发现的一个是噪声消除模块,该模块可以显着降低麦克风上的任何静态噪声,甚至可以降低许多背景噪声,基本上可以为您带来仅以高质量录制自己的声音的好处(用于音频录制)例如)。为此,请按照以下步骤操作:

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

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

    load-module module-echo-cancel
    
  3. 重新加载PulseAudio(pulseaudio -k)或直接重新启动计算机。您应该能够从“输入设备”部分中选择新的“噪声消除”选项:

    屏幕截图

您可以在Echo Cancel Module页面上找到有关它的更多信息

将输入设置为默认

如果您希望将其设置为默认值,则只需将上面的行变为:

load-module module-echo-cancel source_name=logitechsource

然后在文件底部添加

set-default-source logitechsource

在这种情况下,我为source命名logitechsource,但是您可以随便命名,只要重新启动pulseaudio。

重命名设备

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

load-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD

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

屏幕截图


6
容易做,而且似乎不会破坏事情-谢谢!
Vadim Peretokin '16

2
出色的解决方案,对我来说是开箱即用的,谢谢
rancho

1
这样可以减少笔记本电脑产生的大部分风扇噪音,录音效果也好得多!
PJ Brunet

1
天哪,即使是从eBay买到的售价仅为$ 5的翻领麦克风,我也能获得惊人的效果。这不是工作室的质量,但是现在可以很好地用于VOIP通话。
雷蒙德·摩根

2
如果要避免回声模块自动调整音量滑块,可以load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"按照gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom

16

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

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

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

sudo modprobe snd_aloop

这是必需的,因为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

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

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



2

调查表明,没有已知的方法可以对任何Linux子系统进行实时降噪过滤。一些网站指向您可以购买的硬件,与使用软件过滤器相比,可以更好地解决问题。

或者,如果这是用于录音,则可以使声音通过Audacity并在其中使用噪音过滤器。


可惜,我想知道为什么不这样做。感谢您的调查。
Vadim Peretokin 2011年

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

1

这是一种简单的方法,可以在其中实现webrtc-aec

http://wiki.gentoo.org/wiki/PulseAudio

webrtc-aec是使用webrtc.org AudioProcessing库通过执行回声消除,模拟增益控制,噪声抑制和其他处理,在支持VoIP的应用程序中极大地增强了VoIP呼叫。

这是一篇日期为2013年的主题论文(使用pulseaudio进行除噪,而不是专门针对webrtc-aec) http://lac.linuxaudio.org/2013/papers/37.pdf

“我们已经展示了基于PulseAudio的多通道降噪/回声降低解决方案的第一个结果,并激发了设计决策。这项工作对PulseAudio回声消除和信号处理框架进行了许多改进,在版本3.0 / 4.0的开发周期中做出了贡献,并将为将来的嵌入式Linux音频解决方案提供便利。进一步的工作包括优化音频流混合的代码,更有效的重采样方法以及在多通道处理管道中实现有效的AEC。”


我想到的是快速找到噪声轮廓,并使用sox进行实时噪声消除,然后播放音频输出,然后将其用作脉冲输入流。我相信pulse能够以这种方式创建和重定向输入和输出流。也就是说,回放流可以作为输入流重定向到另一个应用程序,并且回放流是针对每个应用程序而不是针对每个设备的,因此不需要将其路由到设备硬件。
user2330377 2013年

我正在尝试使用pacmd列出pulseaudio设备,使用pacat记录和播放它们,并使用sox对流进行实时效果。
user2330377 2013年

您是否有兴趣为其发布脚本?
Vadim Peretokin

0

模块文档页面上没有任何有关噪声消除的信息。模块-echo-cancel内部只有AEC(声学回声消除)算法,该算法具有多种实现方式,例如webrtc | speex。

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

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

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

  • 如果需要在浏览器中使用语音呼叫,则应记住,浏览器具有自己的语音处理算法实现,例如WebRTC。

  • 此外,Web应用程序(如Talky,Hangouts,appear.in等网站)也可以拥有自己的语音处理算法实现,尽管事实上它们可以基于WebRTC 环聊分析

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.