Es bestehen mehrere Möglichkeiten unter Linux Audio-Devices wie Soundkarten, USB-Soundkarten, Headsets, Kameras im System einzubinden. In der Regel wird die Hardware über die ALSA Kerneltreiber angesprochen. ALSA bildet dabei die unterste Schicht, auf ALSA setzen Audioserver auf, wie Pulseaudio, Pipewire und JACK. Pulseaudio ist unter MX-Linux (Debian basierend) der Standard Audioserver und genügt für normale Anwendungen wie Video mit VLC oder Firefox schauen, MP3 Player usw. auch völlig. Auch werden USB Geräte wie z.B. ein Headset mit integrierter Soundkarte automatisch erkannt und eingebunden. Andere Software (vor allem ältere Programme) können nur ALSA direkt ansprechen und für professionelle Software wie Ardour oder Rosegarden ist JACK zu empfehlen. Firefox kann nur mit dem Standard Audioserver arbeiten aber nicht mit JACK. Möchte man alles über JACK leiten, ist für Pulseaudio ein Module mit einer Quelle und Senke erforderlich.
Eine Übersicht der Zusammenhänge der Audioserver, Kerneltreiber und Audiodevices gibt dieses Diagramm:
Mit diesen Modulen kann fast jede Software für Audioanwendungen einen passenden Audioserver finden.
Mit ALSA werden alle Audio- und MIDI Devices im System eingebunden. ALSA ist eine Abstraktionsschicht zur eigentlichen Hardware und stellt eine Schnittstelle zu den Audio und MIDI Devices dar. Auf ALSA können unterschiedliche Audioserver aufsetzen.
Unter MX-Linux wird bei der Standardinstallation Pulseaudio als Audioserver installiert. Pulseaudio greift auf die von ALSA bereitgestellten Audio Devices über die ALSA Schnittstellen zu. Mit dem Programm pavucontrol können Geräte ein- und ausgeschaltet werden, Programme einem Gerät zugeordnet und die Lautstärke eingestellt werden. pavucontrol verbirgt sich hinter dem Lautstärkeregler der Benutzeroberfläche.
Pipewire ist eine Alternative zu Pulseaudio. Wird Pipewire installiert, so wird Pulseaudio deinstalliert. Pipewire stellt dynamische Schnittstellen für Programme zur Verfügung - für Pulseaudio und JACK. Das ist für normale Anwendungen eine gute Sache, wenn man aber statisches Routing mit z.B. Ardour (Mixer) möchte, dann kann es problematisch werden. Für statische Routen mit Pipewire könnte man Wireplumber mit ein paar Lua Scripts verwenden. Leider unterstützt Wireplumber ab Version 0.5 keine Lua Scripts mehr und die Konfiguration ist wesentlich komplizierter geworden. Daher habe ich von Pipewire und Wireplumber wieder Abstand genommen und stattdessen setze ich die Kombination ALSA/Pulseaudio | JACK ein.
JACK ist ein Audioserver mit besonders niedriger Latenzzeit und einem Patchfeld. Mit der Patchfeld Funktionalität können Ein- und Ausgänge von Programmen untereinander verbunden werden. Man kann sich JACK wie ein echtes Hardware-Patchfeld mit vielen Klinken- oder XLR Kabeln vorstellen, mit denen die Geräte z.B. im Studio verbunden werden.
Ich habe mehrere Audio Devices am und im Rechner:
Für dynamische Audio Devices, die per USB mal angesteckt und abgezogen werden, soll weiterhin nur Pulseaudio zuständig sein. Die Geräte werden erkannt und ins System eingebunden und sind dann über pavucontrol steuerbar.
Die On-Board Soundkarte und das USB Soundinterface sollen nur über JACK laufen. Am UMC-404 sind an den Ausgängen Verstärker angeschlossen, ein kleinerer mit an der Wand hängenden Studiomonitoren, links und rechts von den Displays, und eine größerer Verstärker mit entsprechenden Lautsprechern.
Alle Eingänge von Audio Software sollen über Ardour als Mixer zusammengeführt und über Ausgänge für Monitoring und Master an die Onboard-Soundkarte und/oder das UMC-404 Interface verteilt werden können. Weiterhin sollen die Eingänge der Audio Devices auf den Mixer gegeben werden können.
Damit JACK die Onboard Soundkarte und das USB Interface verwenden kann, muss dieses in Pulseaudio deaktiviert werden, da keine zwei Audioserver gleichzeitig auf die Hardware zugreifen können. Das kann in pavucontrol oder mit udev Regeln gemacht werden.
Datei: /etc/udev/rules.d/99-audio-ignore-pulse.rules # # Behringer UMC-404 und onboard Audiokarte soll von Pulseaudio ignoriert # werden, da die Devices von JACK verwendet werden. Alle anderen Audio # Devices wie Webcams, Headsets, Bluetooth Audio usw. sollen weiterhin # automatisch eingebunden und über Pulseaudio verwendet werden. # # # Bus 001 Device 012: ID 1397:0509 BEHRINGER International GmbH UMC404HD 192k ATTR{idVendor}=="1397", ATTR{idProduct}=="0509",ENV{PULSE_IGNORE}="1" # 00:1f.3 Audio device [0403]: Intel Corporation HD Audio Controller [8086:43c8] (rev 11) SUBSYSTEM=="sound", ATTRS{vendor}=="8086", ATTRS{device}=="43c8", ENV{PULSE_IGNORE}="1"
JACK kann über systemweite Dienste oder als Userdienst gestartet werden oder bei Bedarf auch manuell. Welche Soundkarte JACK verwenden soll, stellt man in JACK ein. Dazu ist der Name des Devices erforderlich, den man einfach mit aplay -l bekommt.
tom@amarok:~$ aplay -l **** Liste der Hardware-Geräte (PLAYBACK) **** Karte 0: PCH [HDA Intel PCH], Gerät 0: ALC897 Analog [ALC897 Analog] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0 Karte 0: PCH [HDA Intel PCH], Gerät 1: ALC897 Digital [ALC897 Digital] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0 Karte 1: NVidia [HDA NVidia], Gerät 3: HDMI 0 [DELL U2415] Sub-Geräte: 0/1 Sub-Gerät #0: subdevice #0 Karte 1: NVidia [HDA NVidia], Gerät 7: HDMI 1 [HDMI 1] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0 Karte 1: NVidia [HDA NVidia], Gerät 8: HDMI 2 [HDMI 2] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0 Karte 1: NVidia [HDA NVidia], Gerät 9: HDMI 3 [HDMI 3] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0 Karte 2: J230 [Jabra LINK 230], Gerät 0: USB Audio [USB Audio] Sub-Geräte: 0/1 Sub-Gerät #0: subdevice #0 Karte 4: U192k [UMC404HD 192k], Gerät 0: USB Audio [USB Audio] Sub-Geräte: 0/1 Sub-Gerät #0: subdevice #0
Bei mir ist das UMC-404 Interface mit U192k benannt. Dies wird in den Einstellungen von JACK mit QJackCTL eingetragen. QJackCTL ist ein Programm für die Bedienung und Konfiguration des JACK Audioservers.
Mit QJackCTL können die Ein- und Ausgänge persistent verbunden werden. Diese geschieht mit dem Button Steckfeld (Patchfeld).
Eine andere Alternative ist die grafische Ansicht mit dem Button Graph, hier eine Übersicht, wie das bei mir aussieht, mit Clementine als Mediaplayer und Ardour als Mixer.
In der grafischen Ansicht können die Verbindungen mit der Maus gezeichnet werden, als ob man die Klinkenkabel am Mixer steckt. Die Konfiguration sollte man dann speichern, so dass diese beim Starten vom JACK Audioserver wiederherstellt wird.
Da ich jede Software über Ardour schicken möchte, auch diejenige, die nur mit Pulseaudio arbeiten kann, müssen die Signale von Pulseaudio über JACK an Ardour gesandt werden. Diese geschieht mit Sink und Source Modulen für Pulseaudio. Diese Module müssen in der Regel noch installiert werden.
sudo apt install pulseaudio-module-jack
Die Module müssen aktiviert werden, vor dem Start von Pulseaudio ist es am besten. Manuell können die Module mit
pactl load-module module-jack-sink pactl load-module module-jack-source
geladen werden.
Damit die Module dauerhaft zur Verfügung stehen, sollten diese zur Pulseaudio Konfiguration hinzugefügt werden. Die Module werden in der Datei ~/.config/pulse/default.pa hinzugefügt.
.ifexists module-jack-sink.so load-module module-jack-sink channels=2 .endif .ifexists module-jack-source.so load-module module-jack-source channels=2 .endif
In pavucontrol kann die jeweilige Software eingestellt werden.
Ardour ist der Mixer für alle Audiosignale und die digitale Mehrspur-Bandmaschine für Aufnahmen. Ardour ist sehr umfangreich und kann mit Plugins erweitert werden. Plugins können z.B. Reverb, Delay oder Equalizer sein. Meine Mixer Oberfläche sieht zur Zeit so aus, aber ich probiere auch noch viel aus. Die Oberflächen oder besser Konfigurationen kann man speichern und bei Bedarf wieder aufrufen. Ich nutze das nur zum Musik hören, über die Eingänge vom UMC Interface können die Funkgeräte, Tapelaufwerke, Plattenspieler (mit externem Entzerrvorverstärker) in den Mixer gegeben werden.
Ich teste noch mit diverser Software, die da wäre: