Rauschunterdrückung in Echtzeit mit PulseAudio?

66

Ist es mit PulseAudio möglich, Rauschunterdrückung in Echtzeit durchzuführen, damit die Audioausgabe gleichmäßiger wird?

Vadim Peretokin
quelle
es ist wahrscheinlich möglich, obwohl es intensiv wäre und jemand einen Filter dafür schreiben müsste.
RolandiXor
2
@Vadi - Ich habe eine Antwort hinzugefügt, die Ihnen helfen könnte, wenn Sie immer noch Ubuntu oder eine andere PulseAudio-basierte Distribution verwenden. Hoffe, es funktioniert für Sie Kumpel.
Luis Alvarado
Dieser Beitrag scheint etwas Ähnliches zu tun
akhmed

Antworten:

75

Pulseaudio-Modul module-echo-cancel

Ich fing an, viel über PulseAudio und "versteckte" Optionen zu lesen, damit ich eine finden konnte, die dieser Frage ähnlich war. Das eine, das ich gefunden habe, ist das Modul zur Geräuschunterdrückung, das alle statischen Geräusche am Mikrofon und sogar VIELE Hintergrundgeräusche drastisch reduziert und im Grunde den Vorteil bietet, dass Sie nur Ihre eigene Stimme mit hervorragender Qualität aufnehmen können (für Audioaufnahmen) zum Beispiel). Führen Sie dazu die folgenden Schritte aus:

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

  2. Fügen Sie die folgende Zeile irgendwo in die Datei ein, aber ich empfehle fast am Ende, wo Sie einen Kommentar zu Echo Cancellation finden (~ Zeile 140):

    load-module module-echo-cancel
    
  3. Laden Sie PulseAudio neu ( pulseaudio -k) oder starten Sie den Computer einfach neu. Sie sollten in der Lage sein, die neue Option zur Rauschunterdrückung im Abschnitt "Eingabegerät" auszuwählen:

    Bildschirmfoto

Weitere Informationen dazu finden Sie auf der Echo Cancel Module-Seite

Eingabe als Standard festlegen

Wenn Sie das Echounterdrückungsgerät als Standard festlegen möchten, schalten Sie einfach die obige Zeile in:

load-module module-echo-cancel source_name=logitechsource

und dann am Ende der Datei hinzufügen

set-default-source logitechsource

In diesem Fall habe ich die Quelle benannt logitechsource, aber Sie können sie beliebig benennen und entweder pulseaudio neu starten.

Gerät umbenennen

Zuletzt, wenn Sie in den Toneinstellungen keinen superlangen Namen wünschen (wenn Sie ein Ein- / Ausgabegerät auswählen möchten). Mein Vorschlag ist das Eingabegerät wie folgt umzubenennen:

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

Und wieder Pulseaudio neu starten. Das Endergebnis sieht so aus:

Bildschirmfoto

Luis Alvarado
quelle
6
Einfach zu machen und scheint nichts zu zerbrechen - danke!
Vadim Peretokin
2
Ausgezeichnete Lösung, hat für mich
sofort
1
Dadurch wurde der größte Teil der Lüftergeräusche von meinem Laptop abgeschnitten und meine Aufnahmen klingen viel besser!
PJ Brunet
1
Holy Moly - Ich bekomme erstaunliche Ergebnisse, selbst wenn ich ein beschissenes 5-Dollar-Ansteckmikrofon von eBay bekomme. Es ist keine Studioqualität, aber für VoIP-Anrufe jetzt völlig in Ordnung.
Raymond Morgan
2
Wenn Sie verhindern möchten, dass das Echo-Modul den Lautstärkeregler automatisch anpasst, können Sie die Einstellung load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"gemäß gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom
16

Dies ist eine alte Frage, aber ich hatte das gleiche Problem und nach einigem Googeln (wo ich meistens Leute fand, die zustimmten, dass es nicht möglich war) und Lesen einiger Manpages habe ich jetzt eine Lösung entwickelt, die auf der Idee von user2330377 basiert.

Zuerst müssen Sie ein Geräuschprofil für SoX erstellen. Verwenden Sie einfach ein Audio-Aufnahmeprogramm, um ein paar Sekunden Rauschen aufzunehmen, und cdspeichern Sie es dann in dem Verzeichnis , in dem Sie es gespeichert haben sox noise.wav -n noiseprof noise.prof.

Dann müssen Sie ein ALSA-Loopback-Gerät erstellen:

sudo modprobe snd_aloop

Dies ist erforderlich, da pulseaudio im Gegensatz zu Jack keine Audiosoftware direkt miteinander verbinden kann. Wir werden daher das Loopback-Gerät als Proxy verwenden.

Jetzt müssen Sie pamandie Namen Ihres Mikrofons (oder eines anderen Aufnahmegeräts) und des soeben erstellten Loopback-Geräts suchen. Sobald diese gefunden sind, können Sie den folgenden Befehl ausführen, um die Tonaufnahme von Ihrem Mikrofon zu starten, es durch SoX zu leiten und dann auf dem Loopback-Gerät wiederzugeben:

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

(Wenn Sie die Parameter -d durch die richtigen Gerätenamen ersetzen müssen - das Eingabegerät für den ersten Pacat-Aufruf und die Loopback-Geräteausgabe für das zweite.)

Los geht's, fast geschafft! Starten Sie als letzten Schritt die Tonaufnahme mit der Anwendung Ihrer Wahl, pavucontrolwechseln Sie zum Register "Aufnahme" und stellen Sie das für die Aufnahme verwendete Audiogerät (rechts als graue Schaltfläche angezeigt) auf "Monitor of Loopback Audio" Gerät". Sie sollten jetzt eine klare und rauschfreie Aufnahme haben!

cemper93
quelle
1
Dieses Skript vereinfacht den Prozess gist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Thomas
2

Untersuchungen haben ergeben, dass es bei keinem Linux-Subsystem eine bekannte Methode zur Rauschunterdrückung in Echtzeit gibt. Einige Websites verweisen auf Hardware, die Sie kaufen können. Diese sollte den Trick viel besser machen als ein Softwarefilter.

Wenn es sich um eine Aufnahme handelt, können Sie den Ton auch über Audacity übertragen und dort den Rauschfilter verwenden.

Martin Owens -doctormo-
quelle
Schade, ich frage mich warum nicht. Vielen Dank für die Untersuchung.
Vadim Peretokin
Sicher! Auf der Moduldokumentationsseite gibt es keine Informationen zur Geräuschunterdrückung. Es gibt nur einen AEC-Algorithmus (Acoustic Echo Cancellation) module-echo-cancel, der mehrere Implementierungen hat, wie z. B. webrtc | speex.
Vskubriev
1

Hier ist auf jeden Fall Ton, implementieren Sie webrtc-aec in der

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

webrtc-aec Ja Verwendet die AudioProcessing-Bibliothek von webrtc.org, um VoIP-Anrufe in Anwendungen erheblich zu verbessern, die dies durch akustische Echounterdrückung, analoge Verstärkungsregelung, Rauschunterdrückung und andere Verarbeitung unterstützen.

Hier ist ein Artikel von 2013 zu diesem Thema (Rauschunterdrückung mit pulseaudio, nicht webrtc-aec-spezifisch) http://lac.linuxaudio.org/2013/papers/37.pdf

"Wir haben die ersten Ergebnisse einer Mehrkanal-Rausch- / Echounterdrückungslösung vorgestellt, die auf PulseAudio aufbaut, und die Entwurfsentscheidungen motiviert. Die Arbeit hat zu einer Reihe von Verbesserungen im PulseAudio-Echounterdrückungs- und Signalverarbeitungs-Framework geführt hat während des Entwicklungszyklus von Version 3.0 / 4.0 dazu beigetragen, zukünftige Embedded Linux-Audiolösungen zu vereinfachen. Weitere Arbeiten umfassen die Optimierung des Codes für das Mischen von Audio-Streams, effizientere Resampling-Methoden und die Implementierung einer effizienten AEC in der Mehrkanal-Verarbeitungs-Pipeline. "

user2330377
quelle
Was ich für einen kurzen Moment im Sinn hatte, war, ein Rauschprofil zu erstellen und eine Rauschentfernung in Echtzeit mithilfe von Sox durchzuführen und dann den Audioausgang wiederzugeben, den ich dann als Impuls-Eingabestream verwenden kann. Ich glaube, dass Puls in der Lage ist, Eingangs- und Ausgangsströme auf diese Weise zu erzeugen und umzuleiten. Das heißt, der Wiedergabestream kann als Eingabestream an eine andere Anwendung umgeleitet werden, und der Wiedergabestream ist pro Anwendung und nicht pro Gerät, sodass er nicht an die Gerätehardware weitergeleitet werden muss.
user2330377
Ich benutze pacmd, um Pulseaudio-Geräte aufzulisten, pacat, um sie aufzunehmen und wiederzugeben, und sox, um die Echtzeiteffekte auf dem Stream zu erzielen.
user2330377
Möchten Sie die Skripte dafür veröffentlichen?
Vadim Peretokin
0

Auf der Moduldokumentationsseite gibt es keine Informationen zur Geräuschunterdrückung. Es gibt nur einen AEC-Algorithmus (Acoustic Echo Cancellation) innerhalb von module-echo-cancel, der mehrere Implementierungen aufweist, z. B. webrtc | speex.

Deshalb sollten Sie möglichst Kopfhörer mit integrierter Geräuschunterdrückung kaufen.

Beim Testen der Sprachaufzeichnung in Ubuntu habe ich einige Besonderheiten festgestellt:

  • Skype, Telegram verwendet Rohdaten vom Standardgerät (in meinem Fall Front-in-Mic- | Backward-Mic-Buchsen). Wenn Sie in diesen Apps ein Geräusch unterdrücken müssen, sollten Sie Kopfhörer und Mikrofone nur mit integrierter Geräuschunterdrückungsfunktion kaufen

  • Wenn Sie Sprachanrufe im Browser verwenden müssen, sollten Sie berücksichtigen, dass der Browser über eigene Sprachverarbeitungsalgorithmen verfügt, z. B. WebRTC.

  • Auch Webanwendungen (Websites wie talky, hangouts, appear.in usw.) können eigene Sprachverarbeitungsalgorithmen implementieren, obwohl sie auf der webrtc- Hangout-Analyse basieren können

vskubriev
quelle