Rimozione del rumore in tempo reale con PulseAudio?


66

È possibile eseguire la rimozione del rumore in tempo reale con PulseAudio, quindi l'uscita audio che esce è più uniforme?


probabilmente è possibile, anche se sarebbe intenso e richiederebbe a qualcuno di scrivere un filtro per questo.
RolandiXor

2
@Vadi - Ho aggiunto una risposta che potrebbe aiutarti se stai ancora usando Ubuntu o qualsiasi altro Distro basato su PulseAudio. Spero che funzioni per te amico.
Luis Alvarado,

Questo post sembra fare qualcosa di simile
akhmed

Risposte:


75

Modulo Pulseaudio module-echo-cancel

Ho iniziato a leggere molto su PulseAudio e le opzioni "nascoste" che avevo in modo da poter trovare uno simile a questa domanda. Quello che ho trovato era il modulo di cancellazione del rumore, che riduce drasticamente qualsiasi rumore statico sul microfono e MOLTO rumore di sottofondo, dandoti fondamentalmente il vantaggio di registrare solo la tua voce con una qualità eccellente (per la registrazione audio per esempio). Per fare ciò segui questi passaggi:

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

  2. Aggiungi la seguente riga in qualsiasi punto del file, ma ti consiglio quasi alla fine di trovare un commento sulle cose di cancellazione dell'eco (~ linea 140):

    load-module module-echo-cancel
    
  3. Ricarica PulseAudio ( pulseaudio -k) o riavvia semplicemente il computer. Dovresti essere in grado di selezionare la nuova opzione di cancellazione del rumore dalla sezione Dispositivo di input:

    immagine dello schermo

Puoi trovare maggiori informazioni a riguardo nella pagina del modulo di annullamento dell'eco

Imposta input come predefinito

Se si desidera impostare come predefinito il dispositivo di cancellazione dell'eco, è sufficiente trasformare la riga sopra in:

load-module module-echo-cancel source_name=logitechsource

e poi in fondo al file aggiungere

set-default-source logitechsource

In questo caso ho chiamato la fonte logitechsource, ma puoi nominarla come vuoi e semplicemente riavviare pulseaudio.

Rinomina dispositivo

Infine, se non si desidera un nome super lungo nelle Impostazioni audio (quando si desidera selezionare un dispositivo di input / output). Il mio suggerimento è di rinominare il dispositivo di input in questo modo:

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

E ancora, riavviando pulseaudio. Il risultato finale è simile al seguente:

immagine dello schermo


6
Facile da fare e non sembra rompere le cose - grazie!
Vadim Peretokin,

2
Ottima soluzione,
Rancho,

1
Questo ha tagliato la maggior parte del rumore della ventola dal mio laptop e le mie registrazioni suonano molto meglio!
PJ Brunet,

1
Holy moly - Ottengo risultati sorprendenti anche da un pessimo microfono da $ 5 che ho ottenuto da eBay. Non è la qualità da studio ma ora è perfettamente a posto per le chiamate VOIP.
Raymond Morgan,

2
Se vuoi evitare che il modulo echo regoli automaticamente il cursore del volume, puoi impostare load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"come da gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom

16

Questa è una vecchia domanda, ma ho avuto lo stesso problema e dopo aver cercato su Google (dove ho trovato principalmente persone che erano d'accordo sul fatto che non fosse possibile) e leggendo alcune pagine man, ho ora sviluppato una soluzione basata sull'idea di user2330377.

Per prima cosa devi creare un profilo di rumore per SoX. Basta usare qualsiasi programma di registrazione audio per registrare qualche secondo di rumore, quindi cdnella directory in cui l'hai salvato e fai sox noise.wav -n noiseprof noise.prof.

Quindi è necessario creare un dispositivo di loopback ALSA:

sudo modprobe snd_aloop

Ciò è necessario perché pulseaudio, a differenza di Jack, non è in grado di collegare direttamente il software audio insieme; utilizzeremo quindi il dispositivo di loopback come proxy.

Ora devi avviare pamane trovare i nomi sia del tuo microfono (o altro dispositivo di registrazione) sia del dispositivo di loopback che abbiamo appena creato. Una volta trovati questi, è possibile eseguire il comando seguente per avviare la registrazione dell'audio dal microfono, eseguirne il piping tramite SoX e quindi riprodurlo sul dispositivo di 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

(Dove è necessario sostituire i nomi di dispositivo corretti per i parametri -d: il dispositivo di input per la prima chiamata pacat e l'output del dispositivo di loopback per il secondo.)

Ecco fatto, quasi fatto! Come ultimo passo, inizia a registrare l'audio con l'applicazione che preferisci, quindi esegui l'avvio pavucontrol, passa alla scheda "Registrazione" e imposta il dispositivo audio utilizzato per la registrazione (visualizzato come pulsante grigio a destra) su "Monitora audio loopback Dispositivo". Ora dovresti avere una registrazione chiara e senza rumore!



2

Le indagini dimostrano che non esiste un modo noto di filtrare la riduzione del rumore in tempo reale con nessun sottosistema Linux. Alcuni siti web indicano hardware che puoi acquistare, il che dovrebbe fare molto meglio del filtro software.

In alternativa, se questo è per una registrazione, è possibile passare l'audio attraverso Audacity e utilizzare lì il filtro del rumore.


Peccato, mi chiedo perché no. Grazie per indagare.
Vadim Peretokin,

Sicuro! Non ci sono informazioni sulla pagina della documentazione del modulo sulla cancellazione del rumore. C'è solo un algoritmo AEC (Acoustic Echo Cancel) all'interno module-echo-cancel, che ha diverse implementazioni, come webrtc | Speex.
vskubriev,

1

Ecco a buon ritmo, implementare webrtc-aec in

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

webrtc-aec Sì Utilizza la libreria webrtc.org AudioProcessing per migliorare notevolmente le chiamate VoIP in applicazioni che la supportano eseguendo la cancellazione dell'eco acustico, il controllo del guadagno analogico, la soppressione del rumore e altre elaborazioni.

Ecco un documento del 2013 sull'argomento (rimozione del rumore con pulseaudio non in particolare webrtc-aec) http://lac.linuxaudio.org/2013/papers/37.pdf

"Abbiamo presentato i primi risultati di una soluzione multicanale di riduzione del rumore / eco basata su PulseAudio e motivato le decisioni di progettazione. Il lavoro ha portato a una serie di miglioramenti nel sistema di cancellazione e elaborazione dell'eco PulseAudio, che sono stati ha contribuito durante il ciclo di sviluppo versione 3.0 / 4.0 e dovrebbe facilitare le future soluzioni audio Linux integrate. Ulteriori lavori comprendono l'ottimizzazione del codice per il missaggio del flusso audio, metodi di ricampionamento più ecologici e l'implementazione di un AEC efficiente nella pipeline di elaborazione multicanale. "


Quello che avevo in mente per un attimo era quello di acquisire un profilo di rumore e fare la rimozione del rumore in tempo reale usando sox e quindi riprodurre l'output audio che posso quindi usare come flusso di input in impulso. Credo che il polso sia in grado di creare e reindirizzare flussi di input e output in questo modo. Ciò significa che il flusso di riproduzione può essere reindirizzato come flusso di input verso un'altra applicazione e il flusso di riproduzione è per applicazione e non per dispositivo, quindi non deve essere instradato all'hardware del dispositivo.
user2330377,

Ci sto provando usando pacmd per elencare i dispositivi pulseaudio, pacat per registrare e riprodurre da loro e sox per fare gli effetti in tempo reale sullo streaming.
user2330377,

Saresti interessato a pubblicare gli script per questo?
Vadim Peretokin,

0

Non ci sono informazioni sulla pagina della documentazione del modulo sulla cancellazione del rumore. C'è solo un algoritmo AEC (Acoustic Echo Cancel) all'interno di module-echo-cancel, che ha diverse implementazioni, come webrtc | Speex.

Pertanto, dovresti acquistare il più possibile auricolari | microfoni con funzionalità integrata di cancellazione del rumore.

Mentre provavo la registrazione vocale in Ubuntu ho trovato alcune qualità particolari:

  • Skype, Telegram utilizza input non elaborati dal dispositivo predefinito (nel mio caso jack front-in-mic | back-mic). Se è necessario annullare un rumore in queste app, è necessario acquistare cuffie | microfoni solo con la funzione di cancellazione del rumore integrata

  • Se è necessario utilizzare le chiamate vocali nel browser, è necessario tenere presente che i browser dispongono di implementazioni proprie degli algoritmi di elaborazione vocale, ad esempio WebRTC.

  • Anche le applicazioni web (siti come talky, hangouts, aspetti.in, ecc.) Possono avere le proprie implementazioni di algoritmi di elaborazione vocale, nonostante possano essere basate sull'analisi dell'hangout di webrtc

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.