Usuwanie szumów w czasie rzeczywistym za pomocą PulseAudio?

66

Czy możliwe jest usuwanie szumów w czasie rzeczywistym za pomocą PulseAudio, aby wydobywający się dźwięk był płynniejszy?

Vadim Peretokin
źródło
prawdopodobnie jest to możliwe, choć byłoby to intensywne i wymagałoby od niego napisania filtra.
RolandiXor
2
@Vadi - Dodałem odpowiedź, która może ci pomóc, jeśli nadal używasz Ubuntu lub innej dystrybucji opartej na PulseAudio. Mam nadzieję, że to zadziała dla ciebie, kolego.
Luis Alvarado
Ten post wydaje się robić coś podobnego
akhmed

Odpowiedzi:

75

Moduł Pulseaudio module-echo-cancel

Zacząłem dużo czytać o PulseAudio i dostępnych „ukrytych” opcjach, więc mogłem znaleźć taką, która byłaby podobna do tego pytania. Znalazłem moduł eliminacji szumów, który radykalnie obniża wszelkie szumy statyczne na mikrofonie, a nawet DUŻO szumów tła, co w zasadzie daje korzyść z nagrywania tylko własnego głosu z doskonałą jakością (do nagrywania dźwięku na przykład). Aby to zrobić, wykonaj następujące kroki:

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

  2. Dodaj następujący wiersz w dowolnym miejscu pliku, ale polecam prawie na końcu, gdzie znajdziesz komentarz na temat anulowania echa (~ linia 140):

    load-module module-echo-cancel
    
  3. Załaduj ponownie PulseAudio ( pulseaudio -k) lub po prostu uruchom ponownie komputer. Powinieneś być w stanie wybrać nową opcję redukcji szumów w sekcji Urządzenia wejściowe:

    zrzut ekranu

Więcej informacji na ten temat można znaleźć na stronie modułu Echo Cancel

Ustaw wejście jako domyślne

Jeśli chcesz ustawić jako domyślne urządzenie do anulowania echa, po prostu zmień powyższą linię na:

load-module module-echo-cancel source_name=logitechsource

a następnie na dole pliku dodaj

set-default-source logitechsource

W tym przypadku nazwałem źródło logitechsource, ale możesz je nazwać, jak chcesz i po prostu zrestartować pulseaudio.

Zmień nazwę urządzenia

Na koniec, jeśli nie chcesz bardzo długiej nazwy w ustawieniach dźwięku (gdy chcesz wybrać urządzenie wejścia / wyjścia). Moja propozycja polega na zmianie nazwy urządzenia wejściowego w następujący sposób:

load-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD

I znowu restart pulseaudio. Wynik końcowy wygląda następująco:

zrzut ekranu

Luis Alvarado
źródło
6
Łatwe do zrobienia i chyba nie psują rzeczy - dzięki!
Vadim Peretokin
2
Doskonałe rozwiązanie, wyszło mi z pudełka, dziękuję
rancho
1
To wycięło większość hałasu wentylatora z mojego laptopa, a moje nagrania brzmią o wiele lepiej!
PJ Brunet,
1
Holy Moly - osiągam niesamowite wyniki nawet z kiepskiego mikrofonu z klapami za 5 USD, który dostałem od eBay. Nie jest to jakość studyjna, ale teraz doskonale nadaje się do połączeń VOIP.
Raymond Morgan
2
Jeśli chcesz uniknąć automatycznego dostosowywania suwaka głośności przez moduł echa, możesz ustawić load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"zgodnie z gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom
16

To stare pytanie, ale miałem ten sam problem i po pewnym Googlingu (gdzie głównie znalazłem ludzi, którzy zgodzili się, że to niemożliwe) i przeczytaniu niektórych stron podręcznika, opracowałem rozwiązanie oparte na pomyśle user2330377.

Najpierw musisz utworzyć profil hałasu dla SoX. Wystarczy użyć dowolnego programu do nagrywania dźwięku, aby zarejestrować kilka sekund hałasu, a następnie cddo katalogu, w którym został zapisany i zrobić sox noise.wav -n noiseprof noise.prof.

Następnie musisz utworzyć urządzenie zwrotne ALSA:

sudo modprobe snd_aloop

Jest to wymagane, ponieważ pulseaudio, w przeciwieństwie do Jacka, nie może bezpośrednio połączyć oprogramowania audio razem; będziemy zatem używać urządzenia sprzężenia zwrotnego jako serwera proxy.

Teraz musisz zacząć pamani znaleźć nazwy zarówno mikrofonu (lub innego urządzenia nagrywającego), jak i właśnie utworzonego urządzenia loopback. Po ich znalezieniu możesz wykonać następujące polecenie, aby rozpocząć nagrywanie dźwięku z mikrofonu, przesyłanie go przez SoX, a następnie odtwarzanie na urządzeniu loopback:

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

(Gdzie trzeba zastąpić poprawne nazwy urządzeń parametrami -d - urządzenie wejściowe dla pierwszego wywołania pacat i wyjście urządzenia loopback dla drugiego.)

Proszę bardzo, prawie gotowe! W ostatnim kroku rozpocznij nagrywanie dźwięku za pomocą wybranej aplikacji, a następnie uruchom pavucontrol, przejdź na kartę „Nagrywanie” i ustaw urządzenie audio używane do nagrywania (wyświetlane jako szary przycisk po prawej stronie) na „Monitor Loopback Audio” Urządzenie". Powinieneś teraz mieć wyraźne i wolne od szumów nagranie!

cemper93
źródło
2

Badanie pokazuje, że nie ma znanego sposobu filtrowania szumów w czasie rzeczywistym z jakimkolwiek podsystemem Linux. Niektóre strony internetowe wskazują na sprzęt, który można kupić, co powinno zrobić tę sprawę znacznie lepiej niż filtr oprogramowania.

Alternatywnie, jeśli jest to nagranie, możesz przekazać dźwięk przez Audacity i użyć tam filtra szumu.

Martin Owens -doctormo-
źródło
Szkoda, zastanawiam się, dlaczego nie. Dzięki za zbadanie.
Vadim Peretokin
Pewnie! Na stronie dokumentacji modułu nie ma żadnych informacji o eliminacji hałasu. W środku jest tylko algorytm AEC (Acoustic Echo Cancellation) module-echo-cancel, który ma kilka implementacji, takich jak webrtc | speex.
vskubriev
1

Oto leas tone way, zaimplementuj webrtc-aec w

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

webrtc-aec Tak Wykorzystuje bibliotekę AudioProcessing webrtc.org do ulepszania połączeń VoIP w aplikacjach, które ją obsługują, wykonując eliminację echa akustycznego, kontrolę wzmocnienia analogowego, tłumienie szumów i inne przetwarzanie.

Oto artykuł z 2013 r. Na ten temat (usuwanie hałasu za pomocą pulseaudio, a nie webrtc-aec) http://lac.linuxaudio.org/2013/papers/37.pdf

„Zaprezentowaliśmy pierwsze wyniki wielokanałowego rozwiązania redukcji szumów / echa zbudowanego na PulseAudio i motywowaliśmy do podjęcia decyzji projektowych. Prace doprowadziły do ​​szeregu ulepszeń w strukturze eliminacji echa i przetwarzania sygnału PulseAudio, które zostały wniósł wkład w cykl programowania wersji 3.0 / 4.0 i powinien ułatwić przyszłe wbudowane rozwiązania audio dla Linuksa. Dalsze prace obejmują optymalizację kodu do miksowania strumienia audio, bardziej efektywne metody ponownego próbkowania oraz wdrożenie wydajnego AEC w wielokanałowym potoku przetwarzania. ”

użytkownik2330377
źródło
Szybko miałem na myśli przejęcie profilu hałasu i usunięcie szumu w czasie rzeczywistym za pomocą sox, a następnie odtworzenie wyjścia audio, które następnie mogę wykorzystać jako strumień wejściowy w impulsie. Wierzę, że puls jest w stanie tworzyć i przekierowywać strumienie wejściowe i wyjściowe w ten sposób. Oznacza to, że strumień odtwarzania może zostać przekierowany jako strumień wejściowy do innej aplikacji, a strumień odtwarzania jest na aplikację, a nie na urządzenie, więc nie musi być kierowany do sprzętu urządzenia.
user2330377
Używam pacmd, aby wyświetlić listę urządzeń pulseaudio, pacat do nagrywania i odtwarzania z nich oraz sox do robienia efektów w strumieniu w czasie rzeczywistym.
user2330377
Czy byłbyś zainteresowany opublikowaniem skryptów?
Vadim Peretokin
0

Na stronie dokumentacji modułu nie ma żadnych informacji o eliminacji hałasu. Wewnątrz modułu-echo-anulowania znajduje się tylko algorytm AEC (Acoustic Echo Cancellation), który ma kilka implementacji, takich jak webrtc | speex.

Dlatego powinieneś kupić mikrofony | z wbudowaną funkcją redukcji szumów w jak największym stopniu.

Podczas testowania nagrywania głosu w Ubuntu odkryłem pewne szczególne cechy:

  • Skype, Telegram wykorzystuje nieprzetworzone dane wejściowe z domyślnego urządzenia (w moim przypadku gniazda front-in-mic | backward-mic). Jeśli musisz anulować hałas w tych aplikacjach, powinieneś kupować słuchawki | z mikrofonami tylko ze zintegrowaną funkcją redukcji szumów

  • Jeśli potrzebujesz korzystać z połączeń głosowych w przeglądarce, pamiętaj, że przeglądarki mają własne implementacje algorytmów przetwarzania głosu, np. WebRTC.

  • Także aplikacji internetowych (strony takie jak talkie, Hangouts, appear.in, etc) może mieć swoje własne implementacje algorytmów przetwarzania głosu, mimo że mogą one być oparta na WebRTC hangout analizy

Vskubriev
źródło