Зняття шуму в режимі реального часу за допомогою PulseAudio?


66

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


це, мабуть, можливо, хоч це було б інтенсивно, і зажадав би хтось написати для цього фільтр.
RolandiXor

2
@Vadi - Я додав відповідь, яка може допомогти вам, якщо ви все ще використовуєте Ubuntu або будь-який інший Distro на базі 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) або просто перезавантажте комп'ютер. Ви повинні мати можливість вибрати нову опцію відміни шуму з розділу "Пристрої введення":

    скріншот

Додаткову інформацію про неї можна знайти на сторінці модуля ехо-скасування

Встановити введення за замовчуванням

Якщо ви хочете встановити за замовчуванням, пристрій відміни ехо просто перетворіть вищевказаний рядок у:

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. Кінцевий результат виглядає приблизно так:

скріншот


6
Це легко зробити і, здається, не ламати речі - дякую!
Вадим Перетокін

2
Відмінне рішення, розроблене для мене, спасибі
rancho

1
Це зменшує більшість шумів вентиляторів від мого ноутбука, і мої записи звучать набагато краще!
PJ Brunet

1
Святий молі - я отримую дивовижні результати навіть від хитрого мікрофона від 5 доларів, який я отримав від eBay. Це не студійна якість, але зараз він ідеально підходить для 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/isissue/224
joelostblom

16

Це старе питання, але у мене була та сама проблема, і після деякого Googling (де я в основному знаходив людей, які погодилися, що це неможливо) та прочитавши деякі сторінки чоловіка, я зараз розробив рішення, засноване на ідеї 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 та вихідний пристрій для зворотного зв'язку для другого.)

Ось ви йдете, майже зробили! Як останній крок, почніть записувати звук із програми, яку ви обрали, а потім запустіть pavucontrol, перейдіть на вкладку "Запис" і встановіть аудіопристрій, який використовується для запису (відображається як сіра кнопка праворуч), на "Монітор вимкнення звуку". Пристрій ". Тепер у вас повинна бути чітка і безшумна запис!


1
Цей сценарій спрощує процес gist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Thomas

2

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

Крім того, якщо це для запису, ви можете передавати звук через Audacity і використовувати там фільтр шуму.


Шкода, мені цікаво, чому б і ні. Дякую за розслідування.
Вадим Перетокін

Звичайно! На сторінці документації модулів про відміну шуму немає жодної інформації. Всередині існує лише алгоритм AEC (Acoustic Echo Cancellation) module-echo-cancel, який має кілька реалізацій, як webrtc | speex.
vskubriev

1

Ось на leas tone спосіб, реалізуйте webrtc-aec в

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

webrtc-aec Так Використовує бібліотеку webrtc.org AudioProcessing для посилення VoIP-дзвінків у додатках, що підтримують її, виконуючи акустичну ехову ехологію, аналоговий контроль посилення, придушення шуму та іншу обробку.

Ось документ з 2013 року на цю тему (усунення шуму за допомогою pulseaudio, а не webrtc-aec конкретно) http://lac.linuxaudio.org/2013/papers/37.pdf

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


Що я мав на увазі для швидкого, це сфотографувати звуковий профіль і робити видалення шуму в режимі реального часу за допомогою sox, а потім відтворювати аудіо вихід, який я можу потім використовувати як вхідний потік в імпульсі. Я вважаю, що імпульс здатний створювати та перенаправляти вхідні та вихідні потоки таким чином. Тобто потік відтворення може бути перенаправлений у вигляді вхідного потоку до іншої програми, а потік відтворення - на додаток, а не на пристрій, тому його не потрібно перенаправляти до апаратного забезпечення пристрою.
користувач2330377

Я запускаю це за допомогою pacmd для переліку імпульсних пристроїв, pacat для запису та відтворення з них і sox, щоб робити ефекти в режимі реального часу на потоці.
користувач2330377

Вам буде цікаво розмістити сценарії до нього?
Вадим Перетокін

0

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

Тому вам слід придбати гарнітури | мікрофони з вбудованою функцією відключення шуму якомога більше.

Під час тестування запису голосу в ubuntu я виявив деякі особливості:

  • Skype, Telegram використовує вихідний пристрій із пристрою за замовчуванням (у моєму випадку гніздо "передній мікрофон" | "назад" - мікрофон). Якщо вам потрібно скасувати шум у цих додатках, вам слід купувати гарнітури | мікрофони лише з вбудованою функцією відключення шуму

  • Якщо вам потрібно використовувати голосові дзвінки в браузері, слід пам’ятати, що у браузерах є власні реалізації алгоритмів обробки голосу, наприклад, WebRTC.

  • Також веб-додатки (такі як talky, Hangouts, show.in тощо) можуть мати власні реалізації алгоритмів обробки голосу, незважаючи на те, що вони можуть базуватися на аналізі webrtc hangout-аналізу

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.