Czy możliwe jest usuwanie szumów w czasie rzeczywistym za pomocą PulseAudio, aby wydobywający się dźwięk był płynniejszy?
Czy możliwe jest usuwanie szumów w czasie rzeczywistym za pomocą PulseAudio, aby wydobywający się dźwięk był płynniejszy?
Odpowiedzi:
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:
sudo nano /etc/pulse/default.pa
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
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:
Więcej informacji na ten temat można znaleźć na stronie modułu Echo Cancel
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.
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:
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
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 cd
do 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ąć paman
i 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!
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.
module-echo-cancel
, który ma kilka implementacji, takich jak webrtc | speex.
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. ”
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