Удаление шума в реальном времени с PulseAudio?
Можно ли в режиме реального времени удалять шум с помощью PulseAudio, чтобы выходной звуковой сигнал был более плавным?
10 ответов
Pulseaudio модуль module-echo-cancel
Я начал много читать о PulseAudio и "скрытых" опциях, которые у него были, чтобы найти тот, который был похож на этот вопрос. Я обнаружил модуль шумоподавления, который значительно снижает любой статический шум на микрофоне и даже ОЧЕНЬ много фонового шума, в основном давая вам преимущество только в том, чтобы записывать свой голос с превосходным качеством (для записи звука например). Для этого выполните следующие действия:
sudo nano /etc/pulse/default.pa
Добавьте следующую строку в любом месте файла, но я рекомендую почти в конце, где вы найдете комментарий о материале Echo Cancellation (~ строка 140):
load-module module-echo-cancel
Перезагрузить PulseAudio (
pulseaudio -k
) или просто перезагрузите компьютер. Вы должны быть в состоянии выбрать новую опцию шумоподавления в разделе устройства ввода:
Вы можете найти больше информации об этом на странице модуля Echo Cancel.
Установить вход по умолчанию
Если вы хотите установить по умолчанию устройство эхоподавления, просто превратите приведенную выше строку в:
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
И снова перезапуск пульсаудио. Конечный результат выглядит так:
Это старый вопрос, но у меня была та же проблема, и после некоторого поиска в Google (где я в основном находил людей, которые согласились, что это невозможно), и, читая некоторые справочные страницы, я теперь разработал решение, основанное на идее user2330377.
Сначала вам нужно создать шумовой профиль для SoX. Просто используйте любую программу для записи звука, чтобы записать несколько секунд шума, а затем cd
в каталог, в котором вы сохранили его и делаете sox noise.wav -n noiseprof noise.prof
,
Затем вам нужно создать петлевое устройство ALSA:
sudo modprobe snd_aloop
Это необходимо, потому что 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 и выход устройства loopback для второго.)
Вот и все, почти готово! В качестве последнего шага начните запись звука с приложением по вашему выбору, затем запустите pavucontrol
Перейдите на вкладку "Запись" и установите аудиоустройство, используемое для записи (отображается серой кнопкой справа), на "Монитор Loopback Audio Device". Теперь у вас должна быть чистая и бесшумная запись!
Такое простое решение для Ubuntu LTS или дистрибутивов на основе Debian - это онлайн-скрипт, который активирует функцию шумоподавления, которая уже находится в импульсном аудио (аудио по умолчанию в debian).
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
я использую
NoiseTorch
в Arch Linux прост в использовании и установке => NoiseTorch Github Link
На странице документации модуля нет информации о подавлении шума. Внутри модуля echo-cancel есть только алгоритм AEC (Acoustic Echo Cancellation), который имеет несколько реализаций, например webrtc | Speex.
Поэтому вы должны купить гарнитуру | микрофоны со встроенной функцией шумоподавления.
Когда я тестировал запись голоса в Ubuntu, я обнаружил некоторые особые качества:
Skype, Telegram использует необработанный ввод с устройства по умолчанию (в моем случае разъемы front-in-mic|backward-mic). Если вам нужно отменить шум в этих приложениях, вам следует покупать гарнитуры | микрофоны только с интегрированной функцией шумоподавления
Если вам нужно использовать голосовые вызовы в браузере, то вы должны иметь в виду, что браузеры имеют свои собственные реализации алгоритмов обработки голоса, например, WebRTC.
Кроме того, веб-приложения (такие сайты, как Talky, Hangouts, emerge.in и т. Д.) Могут иметь собственные реализации алгоритмов обработки голоса, несмотря на то, что они могут быть основаны на анализе Hangouts Webrtc
Расследование показывает, что не существует известного способа фильтрации шума в реальном времени с какой-либо подсистемой Linux. Некоторые веб-сайты указывают на аппаратное обеспечение, которое вы можете купить, которое должно работать лучше, чем программный фильтр.
В качестве альтернативы, если это для записи, вы можете пропустить звук через Audacity и использовать там шумовой фильтр.
Есть плагин шумоподавления для module-ladspa-sink:
Здесь вы можете найти руководство по установке в Fedora и 2 примера записей, чтобы получить представление об эффектах плагина:
- https://weblog.lkiesow.de/20200705-ladspa-realtime-noise-suppression-plugin/
- https://fedoramagazine.org/real-time-noise-suppression-for-video-conferencing/
На Убунту:
- Загрузите linux_rnnoise_bin_x64.tar.gz
- Из архива скопируйте
bin/ladspa/librnnoise_ladspa.so
например, в или где-либо еще. - Узнайте имя вашего ввода, используя
pactl list sources short
. Например мой микрофон называется - Запустите приведенные ниже команды, чтобы активировать шумоподавление (перед запуском замените
/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)Чтобы сделать изменения постоянными, добавьте команды из шага 4 в
/etc/pulse/default.pa
, опускаяpacmd
в начале каждой строки.
у моего ноутбука amd такая же проблема, код ниже отменяет мой шум:
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
Надеюсь, кому-нибудь помогут
Вот как минимум, реализовать webrtc-aec в
http://wiki.gentoo.org/wiki/PulseAudio
webrtc-aec Да Использует библиотеку аудиообработки webrtc.org для значительного улучшения VoIP-вызовов в приложениях, которые поддерживают ее, выполняя акустическое эхоподавление, аналоговое управление усилением, подавление шума и другую обработку.
Вот статья на эту тему от 2013 года (устранение шума с помощью pulseaudio, а не webrtc-aec) http://lac.linuxaudio.org/2013/papers/37.pdf
"Мы представили первые результаты многоканального решения по снижению шума / эха, построенного на основе PulseAudio и мотивированного проектными решениями. Работа привела к ряду улучшений в структуре эхоподавления и обработки сигналов PulseAudio, которые были участвовал в цикле разработки версии 3.0 / 4.0 и должен способствовать будущим встроенным аудио-решениям для Linux. Дальнейшая работа включает в себя оптимизацию кода для микширования аудиопотока, более эффективные методы повторной дискретизации и внедрение эффективного AEC в конвейере многоканальной обработки ".
Если вы используете дистрибутив, который используетpipewire
вместоpulseaudio
(например, PopOS 22.04+) вы можете создать источник/микрофон с эхоподавлением, выполнив следующие действия:
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/pipewire.conf
(создайте каталог, если он еще не существует).Добавьте этот фрагмент из документов в активный модуль, чтобы у вас было следующее в вашем
pipewire.conf
:context.modules = [ # ... Lots of other modules loaded here { 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" } } } ]
Перезапустить пайпвайр:
systemctl --user restart pipewire.service
Вы можете прослушать результаты, записав свой голос, используя что-то вродеsimplescreenrecorder
или выполнив эту командуgst-launch-1.0 pulsesrc ! pulsesink
(убедитесь, что у вас есть наушники, иначе микрофон улавливает звук из динамика, вызывая неприятный шум обратной связи).
Я лично считаю, что шумоподавление с помощью модулей эхоподавления делает мой голос более естественным по сравнению с использованием программы, способной к более агрессивному шумоподавлению, такой как NoiseTorch. Тем не менее, эхоподавление в основном подходит для устранения шума вашего вентилятора и тому подобного, тогда как NoiseTorch может автоматически отключать звук вашего микрофона, когда вы не говорите, в дополнение к удалению некоторого шума во время разговора.