Чи можливо зробити видалення шуму в режимі реального часу за допомогою PulseAudio, щоб звуковий сигнал, що вийшов, був більш плавним?
Чи можливо зробити видалення шуму в режимі реального часу за допомогою PulseAudio, щоб звуковий сигнал, що вийшов, був більш плавним?
Відповіді:
module-echo-cancel
Я почав багато читати про PulseAudio та його «прихованих» варіантах, щоб я міг знайти той, що був подібний до цього питання. Я знайшов модуль шумозаглушення, який різко знижує будь-який статичний шум на мікрофоні та навіть НІЧОГО фонового шуму, в основному дає вам перевагу лише записувати власний голос із чудовою якістю (Для запису аудіо наприклад). Для цього виконайте наступні дії:
sudo nano /etc/pulse/default.pa
Додайте наступний рядок у будь-якому місці файлу, але я рекомендую майже в кінці, де ви знайдете коментар про Echo Cancellation (~ рядок 140):
load-module module-echo-cancel
Перезавантажте 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. Кінцевий результат виглядає приблизно так:
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
Це старе питання, але у мене була та сама проблема, і після деякого 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
, перейдіть на вкладку "Запис" і встановіть аудіопристрій, який використовується для запису (відображається як сіра кнопка праворуч), на "Монітор вимкнення звуку". Пристрій ". Тепер у вас повинна бути чітка і безшумна запис!
Дослідження показує, що не існує відомого способу фільтрації шуму в режимі реального часу з будь-якою підсистемою Linux. Деякі веб-сайти вказують на обладнання, яке можна придбати, що повинно зробити трюк набагато краще, ніж робити програмний фільтр.
Крім того, якщо це для запису, ви можете передавати звук через Audacity і використовувати там фільтр шуму.
module-echo-cancel
, який має кілька реалізацій, як webrtc | speex.
Ось на 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 у багатоканальний конвеєр обробки ".
На сторінці документації модулів про відміну шуму немає жодної інформації. Всередині модуля echo-cancel є алгоритм AEC (Acoustic Echo Cancellation), який має кілька реалізацій, як webrtc | speex.
Тому вам слід придбати гарнітури | мікрофони з вбудованою функцією відключення шуму якомога більше.
Під час тестування запису голосу в ubuntu я виявив деякі особливості:
Skype, Telegram використовує вихідний пристрій із пристрою за замовчуванням (у моєму випадку гніздо "передній мікрофон" | "назад" - мікрофон). Якщо вам потрібно скасувати шум у цих додатках, вам слід купувати гарнітури | мікрофони лише з вбудованою функцією відключення шуму
Якщо вам потрібно використовувати голосові дзвінки в браузері, слід пам’ятати, що у браузерах є власні реалізації алгоритмів обробки голосу, наприклад, WebRTC.
Також веб-додатки (такі як talky, Hangouts, show.in тощо) можуть мати власні реалізації алгоритмів обробки голосу, незважаючи на те, що вони можуть базуватися на аналізі webrtc hangout-аналізу