Удаление шума в реальном времени с PulseAudio?

66

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

Вадим Перетокин
источник
это, вероятно, возможно, хотя это было бы интенсивно, и потребовало бы, чтобы кто-то написал фильтр для этого.
RolandiXor
2
@Vadi - я добавил ответ, который может помочь вам, если вы все еще используете Ubuntu или любой другой дистрибутив на основе PulseAudio. Надеюсь, у тебя это получится, приятель.
Луис Альварадо
Этот пост, кажется, делает нечто подобное
Ахмед

Ответы:

75

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

Я начал много читать о PulseAudio и «скрытых» опциях, которые у него были, поэтому я смог найти тот, который был похож на этот вопрос. Я обнаружил модуль шумоподавления, который значительно снижает любой статический шум на микрофоне и даже ОЧЕНЬ много фонового шума, в основном давая вам преимущество только в том, чтобы записывать свой голос с превосходным качеством (для записи звука например). Для этого выполните следующие действия:

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

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

    load-module module-echo-cancel
    
  3. Перезагрузите 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

И снова перезапуск пульсаудио. Конечный результат выглядит так:

Скриншот

Луис Альварадо
источник
6
Легко сделать и не сломать вещи - спасибо!
Вадим Перетокин
2
Отличное решение, разработанное для меня из коробки, спасибо
ранчо
1
Это сократило большую часть шума вентилятора моего ноутбука, и мои записи звучат намного лучше!
PJ Brunet
1
Боже мой, я получаю потрясающие результаты даже от дерьмового 5-долларового отворотного микрофона, который я получил от eBay. Это не студийное качество, но сейчас оно отлично подходит для звонков по VOIP.
Рэймонд Морган
2
Если вы хотите, чтобы модуль echo не настраивал ползунок громкости автоматически, вы можете настроить его 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

Это старый вопрос, но у меня была та же проблема, и после некоторого поиска в 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». Прибор». Теперь у вас должна быть чистая и бесшумная запись!

cemper93
источник
1
Этот скрипт упрощает процесс gist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Томас,
2

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

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

Мартин Оуэнс -доктормо-
источник
Жаль, интересно почему нет. Спасибо за расследование.
Вадим Перетокин
Конечно! На странице документации модуля нет информации о подавлении шума. Внутри есть только алгоритм AEC (Acoustic Echo Cancellation) module-echo-cancel, который имеет несколько реализаций, например webrtc | Speex.
вскубриев
1

Вот как минимум, реализовать 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 в многоканальном конвейере обработки ».

user2330377
источник
Что я имел в виду для быстрого, было взять профиль шума и сделать шумоподавление в режиме реального времени, используя sox, а затем воспроизвести аудиовыход, который я могу затем использовать в качестве входного потока в импульсном режиме. Я считаю, что импульс способен создавать и перенаправлять потоки ввода и вывода таким образом. То есть поток воспроизведения может быть перенаправлен в качестве входного потока в другое приложение, и поток воспроизведения предназначен для каждого приложения, а не для устройства, поэтому его не нужно направлять на аппаратное обеспечение устройства.
user2330377
Для этого я использую pacmd для вывода списка pulseaudio устройств, pacat для записи и воспроизведения с них и sox для выполнения эффектов в реальном времени в потоке.
user2330377
Вы были бы заинтересованы в публикации сценариев для этого?
Вадим Перетокин
0

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

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

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

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

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

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

vskubriev
источник