Устранение шума в реальном времени с помощью PulseAudio?

Можно ли с помощью PulseAudio устранить шум в реальном времени, чтобы выходящий звук был более плавным?

Модуль Pulseaudio module-echo-cancel

Я начал много читать о PulseAudio и "скрытых" опциях, которые у него были, чтобы я мог найти тот, который был похож на этот вопрос. Тот, который я нашел, был модулем шумоподавления, который значительно снижает любой статический шум на микрофоне и даже БОЛЬШУЮ часть фонового шума, в основном давая вам преимущество записи только вашего собственного голоса с отличным качеством (например, для аудиозаписи). Чтобы сделать это, выполните следующие действия:

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

  2. Добавьте следующую строку в любом месте файла, но я рекомендую почти в конце, где вы найдете комментарий о средствах подавления эха (~ строка 140):

    load-module module-echo-cancel
  3. Перезагрузите PulseAudio (pulseaudio -k) или просто перезагрузите компьютер. Вы должны иметь возможность выбрать новую опцию шумоподавления в разделе Устройства ввода:

    screenshot

Вы можете найти более подробную информацию об этом на сайте Страница Модуля Отмены эха

Установите ввод по умолчанию

Если вы хотите, чтобы установить по умолчанию устройство подавления эха просто преобразует приведенную выше строку в:

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. Конечный результат выглядит следующим образом:

screenshot

ОБНОВЛЕНИЕ - Полная документация Найдено Здесь Благодаря милосердный

Это старый вопрос, но у меня была та же проблема, и после некоторого поиска в Google (где я в основном нашел людей, которые согласились, что это невозможно) и прочтения некоторых справочных страниц я разработал решение, основанное на идее 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 и устройство вывода с обратной связью для второго.)

Вот так, почти готово! В качестве последнего шага начните запись звука с помощью выбранного вами приложения, затем запустите pavucontrol, перейдите на вкладку "Запись" и установите для аудиоустройства, используемого для записи (отображается в виде серой кнопки справа), значение "Монитор аудиоустройства с обратной связью". Теперь у вас должна быть четкая и бесшумная запись!

На странице документации модуля нет никакой информации о шумоподавлении. Существует только алгоритм AEC (Acoustic Echo Cancellation) внутри модуля-echo-cancel, который имеет несколько реализаций, таких как webrtc | speex.

Поэтому вам следует как можно чаще покупать гарнитуры| микрофоны со встроенной функцией шумоподавления.

Когда я тестировал запись голоса в ubuntu, я обнаружил некоторые особые качества:

  • Skype, Telegram использует необработанный ввод с устройства по умолчанию (в моем случае разъемы front-in-mic|backward-mic). Если вам нужно отменить шум в этом приложении, вам следует покупать гарнитуры | микрофоны только со встроенной функцией шумоподавления.

  • Если вам нужно использовать голосовые вызовы в браузере, то вам следует иметь в виду, что браузеры имеют собственные реализации алгоритмов обработки голоса, например WebRTC.

  • Также веб-приложения (такие сайты, как talky, hangouts, appear.in , и т.д.) может иметь свои собственные реализации алгоритмов обработки голоса, несмотря на то, что они могут быть основаны на webrtc hangout-анализ

Очень простое решение для дистрибутивов ubuntu LTS или debian - это онлайн-скрипт, который активирует функцию шумоподавления, которая уже есть в pulse audio (аудио по умолчанию в 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.baksudo cat <<EOT >> /etc/pulse/default.paload-module module-echo-cancel source_name=noechosource sink_name=noechosinkset-default-source noechosourceset-default-sink noechosinkEOT

Исследование показывает, что не существует известного способа выполнения фильтрации с шумоподавлением в реальном времени с помощью какой-либо подсистемы Linux. Некоторые веб-сайты указывают на оборудование, которое вы можете купить, которое должно работать намного лучше, чем программный фильтр.

В качестве альтернативы, если это для записи, вы можете пропустить звук через Audacity и использовать там фильтр шума.

Вот, по крайней мере, один способ реализовать webrtc-aec в

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

webrtc-aec Yes Использует webrtc.org Библиотека аудиообработки для значительного улучшения VoIP-вызовов в приложениях, которые ее поддерживают, путем выполнения подавления акустического эха, управления аналоговым усилением, подавления шума и другой обработки.

Вот статья на эту тему, датированная 2013 годом (удаление шума с помощью pulseaudio, а не конкретно webrtc-aec)http://lac.linuxaudio.org/2013/papers/37.pdf

"Мы представили первые результаты многоканального решения для подавления шума и эха, построенного на базе PulseAudio, и обосновали проектные решения. Результатом этой работы стал ряд улучшений в системе подавления эха и обработки сигналов PulseAudio, которые были внесены в течение цикла разработки версии 3.0/4.0 и должны облегчить будущие встроенные аудио-решения Linux. Дальнейшая работа включает оптимизацию кода для микширования аудиопотока, более эффективные методы передискретизации и реализацию эффективного AEC в многоканальном конвейере обработки".

Существует плагин подавления шума для модуля-ladspa-sink:

Здесь вы можете найти руководство по установке на Fedora и 2 образца записей, чтобы получить представление о эффектах плагина:

На Ubuntu:

  1. Загрузите linux_rnnoise_bin_x64.tar.gz
  2. Из архива скопируйте 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
  1. В вашем приложении для записи голоса вы настроите аудиовход с Null output или Remapped monitor of null output и тест (я использовал Skype Echo)

  2. Чтобы сделать изменения постоянными, добавьте команды из шага 4 в /etc/pulse/default.pa, опуская pacmd в начале каждой строки.

у моего ноутбука amd та же проблема приведенный ниже код отменяет мой шум:

sudo nano /etc/pulse/default.pa## add below code on bottom### Enable Echo/Noise-Cancelationload-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sinkset-default-source echoCancel_sourceset-default-sink echoCancel_sink### 2nd tips.ifexists module-echo-cancel.soload-module module-echo-cancel aec_method=webrtc source_name=echocancel sink_name=echocancel1set-default-source echocancelset-default-sink echocancel1.endif

Надеюсь, что кому-то будет оказана помощь

@Vadi - Я добавил ответ, который может помочь вам, если вы все еще используете Ubuntu или любой другой дистрибутив на базе PulseAudio. Надеюсь, это сработает для тебя, приятель.

вероятно, это возможно, хотя это было бы трудоемко и потребовало бы, чтобы кто-то написал для этого фильтр.

Это post, кажется, делает что-то подобное