Adventskalender 7. Dezember 2022 - pipewire und Kopfhörer

Smalltalk
Antworten
Benutzeravatar
smutbert
Moderator
Beiträge: 8319
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Adventskalender 7. Dezember 2022 - pipewire und Kopfhörer

Beitrag von smutbert » 07.12.2022 00:00:07

Einen wunderschönen 7. Dezember wünsche ich und willkommen hinter Tür Nummer 7!

Heute geht es also um das Soundsystem pipewire und um Kopfhörer. Der Text ist etwas länger geworden als ich wollte, aber ich habe versucht alle notwendigen Schritte nicht nur zu beschreiben sondern auch im Teil Durchführung in Codezeilen zu packen, damit es sich mit möglichst wenig Aufwand ausprobieren lässt – ich hoffe das ist geglückt.


Einleitung

Kopfhörer

Fangen wir mit den Kopfhörern an. Beim normalen Hören von Stereomaterial mit Kopfhörern, hört das linke Ohr so gut wie nur den linken Kanal und das rechte Ohr nur den rechten.
Normale Stereoaufnahmen sind allerdings darauf ausgerichtet, mit Lautsprechern wiedergegeben zu werden und da hören beide Ohren frequenzabhängig gedämpft und verzögert auch den jeweils anderen Kanal und obendrein noch jede Menge Reflexionen, die wichtig für einen räumlichen Klangeindruck sind. Deswegen hat man bei Kopfhörern oft das Gefühl, die Töne kämen aus dem eigenen Kopf.

Das Audiosignal ändert sich also auf dem Weg zum Ohr und die Funktion, die diese Änderung beschreibt, nennt man head related transfer function (HRTF oder auf deutsch kopfbasierte Übertragungsfunktion). Kopfbasiert, weil sie sehr stark von der Form des Kopfes, besonders von Frisur, Hinterkopf und Nase, abhängt.

Es gibt mehrere Wege wie man das bei der Wiedergabe nachbilden kann. Am besten funktioniert es, sich in jedes Ohr ein Mikrofon zu stecken und mit einem Testsignal über gute Lautsprecher in einen klanglich guten Raum aufzunehmen was beim Ohr ankommt und es gibt auch tatsächlich Enthusiasten, die genau das machen. So kommt man zu Impulsantworten (IR, impulse responses), die man analog zu den HRTF auch HRIR nennt.
Schneller kommt man mit fertigen HRIR-Dateien bereits erstellt haben zu einem Ergebnis. Auch nett ist, dass die meisten HRIR-Dateien nicht nur den Klang von zwei, also einem Paar Stereolautsprechern beschreiben sondern typischerweise gleich von einem 5.x oder 7.x Surroundsetup, gut geeignet um Filme oder dergleichen zu genießen.

pipewire.

Wie viele vielleicht schon mitbekommen haben dürften, ist Pipewire gerade dabei Pulseaudio zu verdrängen und es funktioniert bereits unter stable (bullseye) recht gut, erst recht mit den Backports und im aktuellen unstable und testing (bookworm). Pipewire bietet auch die Softwareschnittstellen von Alsa, Pulseaudio und Jack an, damit wirklich so ziemliche jede Anwendung den Ton auch über Pipewire ausgeben kann.
Wie sich der virtuelle Surround mit Pulseaudio umsetzen lässt habe ich bereits im Wiki-Artikel Audiokonfiguration geschildert, aber mit pipewire funktioniert es meiner Einschätzung nach noch etwas bequemer.
Nachdem ich für pipewire keine aus meiner Sicht brauchbare Anleitung gefunden habe, versuche ich mich heute an einer solchen Anleitung.



Durchführung

pipewire

Zuerst einmal muss pipewire das verwendete Soundsystem sein. Unter bullseye würde ich die Backports empfehlen, dann sollte es genauso wie unter einem aktuellen testing oder unstable, genügen Pulseaudio zu deinstallieren oder deaktivieren, Debianwireplumber, Debianpipewire-pulse und für Bluetooth-Audiogeräte Debianlibspa-0.2-bluetooth zu installieren und wireplumber als Benutzerdienst zu aktiveren.
Wenn bei bullseye die Backports bereits in den Paketquellen stehen oder testing/unstable verwendet wird, sollte das ungefähr so klappen:

Code: Alles auswählen

# apt install wireplumber pipewire-pulse

Code: Alles auswählen

$ systemctl --user mask pulseaudio.service
$ systemctl --user enable wireplumber.service
Die Impulsantworten (HRIR)

Dann brauchen wir eine passende HRIR-Datei. Die Auswahl im Netz an auf unterschiedliche Weise aufgenommenen HRIR-Dateien von Universitäten, Kopfhörerherstellern oder von begeisterten Klangbastlern selbst erzeugten Impulsantworten ist sehr groß.
Ich beschränke mich hier der Einfachheit halber erst einmal auf HRIRs, die Davi Carvalho [3] im Rahmen seiner Bachelorarbeit mit Matlab erzeugt und freundlicherweise veröffentlicht hat [2]. Gemeint ist die Datei »EAC_HRIRs_48kHz.wav«, die wir unter »~/.config/pipewire/hrir.wav« speichern:

Code: Alles auswählen

$ mkdir -p ~/.config/pipewire/pipewire.conf.d
$ wget -O ~/.config/pipewire/hrir.wav "https://sourceforge.net/p/hesuvi/discussion/general/thread/df9b0f231c/91c9/attachment/EAC_HRIRs_48kHz.wav"
filter chain

Was wir wollen nennt sich unter Pipewire filter chain. Eine Vorlage für die passenden Änderungen habe ich im Quellcodearchive von pipewire gefunden [1], nur die Pfade zur HRIR-Datei müssen angepasst werden (in der Konfigurationsdatei sind das relative Pfade »hrir_hesuvi/hrir.wav« mit einem mir unbekannten Startpunkt, daher ersetzen wir die im folgenden durch den absoluten Pfad zur eben heruntergeladenen wav-Datei »${HOME}/.config/pipewire/hrir.wav«):

Code: Alles auswählen

$ wget -O ~/.config/pipewire/pipewire.conf.d/virtual-surround.conf "https://gitlab.freedesktop.org/pipewire/pipewire/-/raw/master/src/daemon/filter-chain/sink-virtual-surround-7.1-hesuvi.conf?inline=false"
$ sed -i "s|hrir_hesuvi|${HOME}/.config/pipewire|g" ~/.config/pipewire/pipewire.conf.d/virtual-surround.conf


Verwendung des neuen virtuellen Ausgabegeräts

Nach diesen Schritten sollte in pipewire, nach dem nächsten Neustart (ich habe es zumindest unter Gnome nicht immer problemlos geschafft, pipewire neu zu starten) ein neues virtuelles Ausgabegerät namens „Virtual Surround Sink“ zur Verfügung stehen.
Bevor man das zur Wiedergabe auswählt, muss man das hardwaremäßig gewünschte Gerät und den richtigen Audioausgang zur Wiedergabe ausgewählt haben, denn an dieses neue virtuelle Ausgabegerät leitet die Wiedergabe an das bisherige Wiedergabegerät weiter. Das kann in den Einstellungesdialogen der Desktopumgebung, in Debianpavucontrol oder auch in der Kommandozeile mit pactl oder auch mit Debianpulsemixer erledigt werden.

Und noch ein kleiner Hinweis. Will man sich einen Film oder andere Material mit mehr als 2 Kanälen ansehen, sollte man die Audiogeräteumschaltereien erledigen bevor man die Wiedergabe startet.
Andernfalls kann es passieren, dass die Wiedergabe mangels der Surroundfähigkeit des Audiogeräts mit Stereowiedergabe startet und auch nichts daran ändert, wenn man später auf den virtuellen Surround umschaltet.



weitere, „bessere“ HRIR-Dateien

Welche HRIR-Dateien wie gut funktionieren ist individuell verschieden und es erfordert auch etwas Gewöhnung mit Kopfhörern mehr wie mit Lautsprechern zu hören, aber es gibt viele HRIRs, das gilt möglicherweise auch für andere.
Zu beachten ist nur, dass wenn man andere HRIRs sucht, dass sie wie die hier verwendeten 14 Kanäle haben (die Konfigurationsdatei ist für 7.x ausgelegt und man braucht und es gibt von den 7 Kanälen für jedes Ohr die passende Impulsantwort → 14 Kanäle), andernfalls muss man entweder die Konfiguration anpassen oder die HRIR-Dateien bearbeiten und es wird sehr schnell sehr aufwändig, wenn man aus hunderten HRIRs die beste ermitteln will und die meisten davon auch noch in irgendeiner Form anpassen, sich zum Beispiel aus hunderten von Kanälen die passenden 14 heraussuchen muss.

Eine einfachere Variante ist da noch sich etwas fertiges zu suchen, das andere im Internet hochgeladen haben, so wurden etwa HRIRs mit Hilfe von Geräten erstellt, die „Dolby Atmos for Headphones“ unterstützen, aber ohne es zu wissen befürchte ich, dass man sich da zumindest in einem rechtlichen Graubereich bewegt, daher halte ich mich mit Links zurück.
Wenn ihr euch selbst auf die Suche machen wollt, könnt ihr nach HRIR und „HeSuVi“ suchen, letzteres ist ein Tool, das unter Windows dasselbe macht, wie wir hier und für das sich viele HRIRs oder sogar HRIR-Sammlungen finden, die wenn sie für 7.x sind, auch mit unserer Konfiguration hier funktionieren.


Sonst lassen sich mit der Software vom oben erwähnten Davi Carvalho auch noch möglicherweise bessere HRIRs erzeugen. Mir gefällt zum Beispiel die so erzeugte »EAC_Default.wav« aus diesem Verzeichnis recht gut:
https://mega.nz/folder/uWZFzBDQ#EuwFR9pdEtUG11fw5RiRNw
(Es genügt sie wie oben als »~/.config/pipewire/hrir.wav« zu speichern.)


Zum Testen wie gut besonders die vorne/hinten-Lokalisation funktioniert, bieten sich Testdateien an. Auf dieser Seite [4] ganz unten gibt es 7.1-Testdateien. Bei der Wiedergabe im Browser wurde die bei mir allerdings immer auf Stereo heruntergemixt, deswegen empfehle ich die Datei herunterzuladen und dann mit einem geeigneten Player, z. B. Debianmpv abzuspielen.


[1] https://gitlab.freedesktop.org/pipewire ... esuvi.conf
[2] https://sourceforge.net/p/hesuvi/discus ... f9b0f231c/
[3] https://github.com/davircarvalho/Indivi ... _Synthesis
[4] https://www2.iis.fraunhofer.de/AAC/multichannel.html

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 7. Dezember 2022 - pipewire und Kopfhörer

Beitrag von Meillo » 07.12.2022 08:10:55

smutbert hat geschrieben: ↑ zum Beitrag ↑
07.12.2022 00:00:07
Einleitung

Kopfhörer

Fangen wir mit den Kopfhörern an. Beim normalen Hören von Stereomaterial mit Kopfhörern, hört das linke Ohr so gut wie nur den linken Kanal und das rechte Ohr nur den rechten.
Normale Stereoaufnahmen sind allerdings darauf ausgerichtet, mit Lautsprechern wiedergegeben zu werden und da hören beide Ohren frequenzabhängig gedämpft und verzögert auch den jeweils anderen Kanal und obendrein noch jede Menge Reflexionen, die wichtig für einen räumlichen Klangeindruck sind. Deswegen hat man bei Kopfhörern oft das Gefühl, die Töne kämen aus dem eigenen Kopf.

Das Audiosignal ändert sich also auf dem Weg zum Ohr und die Funktion, die diese Änderung beschreibt, nennt man head related transfer function (HRTF oder auf deutsch kopfbasierte Übertragungsfunktion). Kopfbasiert, weil sie sehr stark von der Form des Kopfes, besonders von Frisur, Hinterkopf und Nase, abhängt.

Es gibt mehrere Wege wie man das bei der Wiedergabe nachbilden kann. Am besten funktioniert es, sich in jedes Ohr ein Mikrofon zu stecken und mit einem Testsignal über gute Lautsprecher in einen klanglich guten Raum aufzunehmen was beim Ohr ankommt und es gibt auch tatsächlich Enthusiasten, die genau das machen. [...]
Was fuer ein abgefahrenes Thema!

Danke fuer diesen Einblick in ein Thema, von dem ich noch nicht mal wusste, dass es es gibt. :-D

Jedes Tuerchen ist eine neue Ueberraschung. :THX:
Use ed once in a while!

Benutzeravatar
paedubucher
Beiträge: 850
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 7. Dezember 2022 - pipewire und Kopfhörer

Beitrag von paedubucher » 07.12.2022 10:20:43

Ich bedanke mich schon einmal für den Hinweis auf Pipewire! Ausprobieren werde ich die hier geschilderten Sachen wohl nicht gerade heute und morgen, da im Moment mein Audio-Setup einigermassen funktioniert (basierend auf pulseaudio).

Aber gut zu wissen, dass sich da eine Alternative etabliert! :THX:
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 7. Dezember 2022 - pipewire und Kopfhörer

Beitrag von mn77de » 07.12.2022 14:21:14

Sachen gibts ... wieder was gelernt ... Danke! :THX:
OpenSource! :THX:

Benutzeravatar
smutbert
Moderator
Beiträge: 8319
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Adventskalender 7. Dezember 2022 - pipewire und Kopfhörer

Beitrag von smutbert » 07.12.2022 19:55:25

Hoffentlich war es nicht zu speziell.
Ich habe mich zwar zurückzuhalten, sonst hätte ich noch viel mehr über Impulsantworten erzählt, die man im Dunstkreis von Rundfunkanstalten und Universitäten findet, bei denen es Kanäle für alle Richtungen in der Ebene gibt, z.B. pro ° einen und damit 360 oder 720 Kanäle und das in mehrfacher Ausführung für unterschiedlich große Räume und Höhen, unterschiedliche Probanden (inklusive Beschreibungen des Kopfes, wie Glatze, keine Brille, Oberlippenbart, große Nase, flacher Hinterkopf) und dann vielleicht auch noch angepasst für unterschiedliche Kopfhörer.

Der Umstieg von pulseaudio auf pipewire ist übrigens recht einfach und normalerweise problemlos.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 7. Dezember 2022 - pipewire und Kopfhörer

Beitrag von Meillo » 07.12.2022 20:08:16

Es war schon speziell, aber gerade das macht fuer mich den Adventskalender auch aus. Auf jeden Fall habe ich durch dein Tuerchen einiges gelernt.
Use ed once in a while!

Antworten