Skip to content
rodolfo.gg
Go back

So konfigurierst du ein 4.1-Audiosystem unter Linux mit PipeWire, JamesDSP und systemd

CC BY-NC-ND 4.0
Rodolfo González González

So konfigurierst du ein 4.1-Audiosystem unter Linux mit PipeWire, JamesDSP und systemd

Einführung

Anfang der 2000er kaufte ich ein quadrophonisches 4.1-Lautsprechersystem, das Cambridge Soundworks FPS2000 Cambridge Soundworks FPS2000, das in Verbindung mit einer Sound Blaster AWE64 Mark II Musik und Videospiele mit einem sehr überzeugenden, immersiven Quadrophonie-Effekt ermöglichte. Als ich später Komponenten austauschte, wechselte ich zu einer ASUS Xonar D2X, die zwar eine moderne dedizierte Soundkarte war, aber nicht über den digitalen Anschluss der Sound Blaster verfügte. Außerdem musste ich mangels offizieller Treiber für moderne Windows-Versionen auf Community-Treiber zurückgreifen. Nach dem Umstieg auf Debian Linux funktionierte die ASUS Xonar D2X nicht mehr korrekt, wodurch die hinteren Lautsprecher überhaupt kein Signal mehr bekamen. Sound Blaster AWE64 Nach mehreren fehlgeschlagenen Konfigurationsversuchen entschied ich mich, wieder auf den integrierten Audiochip des Mainboards ASUS ROG STRIX B550-F Gaming zurückzugehen. Obwohl er nicht dediziert ist, ist er vollständig mit PipeWire kompatibel und erlaubt eine stabile quadrophonische Konfiguration.

Diese Anleitung beschreibt die endgültige Lösung zur Konfiguration eines Cambridge Soundworks FPS2000 quadrophonischen 4.1-Lautsprechersystems auf einem modernen Mainboard mit der Distribution Debian Forky/Sid unter Verwendung des PipeWire-Soundservers, des JamesDSP-Plugins und der Automatisierung über einen systemd-Benutzerdienst.


Inhaltsverzeichnis

Inhaltsverzeichnis

1. Technische Hardwareanalyse und Begründung für den Wechsel

Warum die ASUS Xonar D2X nicht funktionierte

ASUS Xonar D2X

Die dedizierte ASUS Xonar D2X (AV200 / C-Media CMI8788-Chipsatz) weist auf modernen Plattformen wie AMD B550 (AM4-Architektur) unüberwindbare Inkompatibilitäten auf:

  1. Veralteter Treiber ohne Support (snd_virtuoso): Das Kernelmodul für diese Karte wurde ursprünglich zwischen 2007 und 2009 entwickelt. In modernen Linux-Kernel-Versionen und unter dynamischen Audioarchitekturen wie PipeWire schlägt das Mapping der sekundären Kanäle fehl, was zu erzwungenem Downmixing nach vorne oder zu vollständigem Signalverlust führt.
  2. Elektrischer Fehler der PCIe-Brücke (PLX PEX8112): Die Xonar D2X ist eine native PCI-Karte, die einen physischen Bridge-Chip nutzt, um sich an den PCI-Express-Bus anzupassen. Moderne Chipsätze verwalten die Energiezustände dieser alten Komponente über diesen veralteten Treiber nicht korrekt. Dadurch kann die Karte den Spannungsimpuls nicht senden, der nötig ist, um ihre sekundären mechanischen Analogrelais zu aktivieren. In der Folge meldet das Betriebssystem zwar die hinteren Ports als aktiv, die physischen Buchsen (schwarz/orange) bleiben elektrisch jedoch vollständig inaktiv.

Auswahl der integrierten Karte (Realtek SupremeFX S1220A)

ASUS ROG STRIX B550-F Gaming

Deshalb fiel die Entscheidung, zum integrierten Audiochip des ASUS ROG STRIX B550-F Gaming Mainboards zurückzukehren. Dieser verwendet den modernen Standardtreiber snd-hda-intel, der im Linux-Kernel vollständig gepflegt wird und dadurch Stabilität, PipeWire-Kompatibilität und unmittelbare analoge Reaktion garantiert.

2. Funktionsweise der Cambridge Soundworks FPS2000

Die Cambridge Soundworks FPS2000 arbeiten hinsichtlich der Verarbeitung von Audiosignalen auf eine besondere Weise:

3. Implementierung und Konfiguration des Systems

Schritt 1: Physischer Kabelanschluss

  1. Schließe das grüne Kabel (Frontlautsprecher) an die grüne Buchse (Line Out / L-OUT) auf der Rückseite des ROG-STRIX-Boards an.
  2. Schließe das schwarze Kabel (Hinterlautsprecher) an die schwarze Buchse (REAR) auf der Rückseite des ROG-STRIX-Boards an.
  3. Lasse die übrigen analogen Ports frei.

Schritt 2: Konfiguration des Audioprofils

Öffne im Lautstärkemixer deiner Desktop-Umgebung (KDE Plasma) die Konfiguration des integrierten Audiogeräts (“Internes Audio”) und wähle das Profil Analoger Surround 4.1 aus (oder 5.1, falls Ersteres nicht verfügbar ist, da das Script den Center-Kanal ignorieren wird). Dadurch werden die benötigten Hardware-Nodes in PipeWire bereitgestellt.

Schritt 3: Script zum Klonen der Kanäle

Wir erstellen das Script, das den von JamesDSP verarbeiteten Stereostream auf die hinteren Ausgänge und den virtuellen LFE-Kanal dupliziert:

Bevor du das Script erstellst, musst du den internen Namen des integrierten Audioausgangs in PipeWire ermitteln. Aktiviere dazu zuerst das Profil Analoger Surround 4.1 und führe dann aus:

Terminal window
pactl list short sinks

In meinem Fall erscheint der integrierte Ausgang mit einem Namen ähnlich diesem:

alsa_output.pci-0000_0f_00.4.analog-surround-41

Der Teil, der die Hardware stabil identifiziert, ist alsa_output.pci-0000_0f_00.4; das Suffix .analog-surround-41 entspricht dem gewählten Ausgabeprofil. Du kannst den exakten Namen der von PipeWire bereitgestellten Ports auch mit folgendem Befehl prüfen:

Terminal window
pw-link -o | grep analog-surround

Der ermittelte Wert muss in der Variable INTEGRADA des Scripts verwendet werden. Wenn Mainboard oder PCI-Bus unterschiedlich sind, ändert sich dieser Bezeichner.

~/.local/bin/fix-audio-routing.sh
#!/bin/bash
# Unveränderliche Hardwareadresse der integrierten Soundkarte
INTEGRADA="alsa_output.pci-0000_0f_00.4"
# Absoluter Pfad zum PipeWire-Programm zur Link-Steuerung
PW_BIN="/usr/bin/pw-link"
# Dupliziere den vorderen linken Kanal (FL) auf den hinteren linken Kanal (RL)
# Leitet Fehler nach /dev/null um, falls der Link bereits besteht
$PW_BIN jdsp_@PwJamesDspPlugin_JamesDsp:output_FL ${INTEGRADA}.analog-surround-41:playback_RL 2>/dev/null
# Dupliziere den vorderen rechten Kanal (FR) auf den hinteren rechten Kanal (RR)
$PW_BIN jdsp_@PwJamesDspPlugin_JamesDsp:output_FR ${INTEGRADA}.analog-surround-41:playback_RR 2>/dev/null
# Erzwinge die Einspeisung des linken Signals in den virtuellen Subwoofer-Kanal (LFE)
# Das stellt Konsistenz in der von der Matrix verwalteten Tiefbasszuordnung sicher
$PW_BIN jdsp_@PwJamesDspPlugin_JamesDsp:output_FL ${INTEGRADA}.analog-surround-41:playback_LFE 2>/dev/null
# Mit erfolgreichem Status beenden, um Warnungen in systemd zu vermeiden
exit 0

Vergib Ausführungsrechte an das Script:

Terminal window
chmod +x ~/.local/bin/fix-audio-routing.sh

Schritt 4: Automatisierung mit systemd auf Benutzerebene

Damit die Konfiguration beim Anmelden automatisch ausgeführt wird, erstellen wir eine Benutzerdienst-Unit.

Erstelle die Konfigurationsdatei:

~/.config/systemd/user/dsp-routing.service
[Unit]
Description=4.1-Kanalduplizierung für Cambridge FPS2000
# Stellt sicher, dass das Script ausgeführt wird, nachdem Soundserver und grafische Sitzung bereit sind
After=pipewire.service wireplumber.service graphical-session.target
[Service]
# Setzt den Typ auf oneshot, da das Script schnell ausgeführt wird und sofort endet
Type=oneshot
# Ausführungsbefehl mit der Makrovariable %h, die das Home des Benutzers dynamisch auflöst
ExecStart=%h/.local/bin/fix-audio-routing.sh
# Fügt eine Verzögerung von 3 Sekunden hinzu, damit JamesDSP vollständig geladen ist
ExecStartPre=/bin/sleep 3
RemainAfterExit=yes
[Install]
# Verknüpft den Dienst mit dem Standardziel der Benutzeranmeldung
WantedBy=default.target

Führe die folgenden Befehle aus, um den Dienst zu registrieren, zu aktivieren und sofort zu starten:

Terminal window
# Systemd-Daemon neu laden, damit die neue Benutzer-Unit erkannt wird
systemctl --user daemon-reload
# Dienst aktivieren, damit er bei jeder Anmeldung automatisch ausgeführt wird
systemctl --user enable dsp-routing.service
# Dienst sofort manuell starten, um die Umgebung zu aktivieren
systemctl --user start dsp-routing.service

Um zu prüfen, ob die Initialisierung korrekt erfolgt ist, kontrolliere den Status mit:

Terminal window
systemctl --user status dsp-routing.service

Es sollte der Status Active: active (exited) in grüner Farbe angezeigt werden.

Wenn du den Regler des Balance-Potentiometers (Fader) nach links oder rechts drehst, kannst du überprüfen, dass die hinteren Lautsprecher korrekt Signal erhalten und der Subwoofer die tiefen Frequenzen gleichmäßig wiedergibt.



Next Post
So fügst du einem Cloudflare-Blog mit D1 einen Old-School-Besucherzähler hinzu, für Astro und SvelteKit in SSR.