OSS, ALSA, Jack, Pulseaudio und Pipewire - Die Linux-Audio-Systeme

Alles rund um das System Linux
Administrator
Beiträge: 1076
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz

Has thanked: 66 times
Been thanked: 590 times

OSS, ALSA, Jack, Pulseaudio und Pipewire - Die Linux-Audio-Systeme

Beitrag von robertgoedl »

In diesem Beitrag, der Linux Bibel Österreich werden wir uns das Linux-Audio-System etwas genauer ansehen - es handelt sich hier um eine wechselhafte Zeit und Geschichte. Zum größten Teil wird es sich hier um Beschreibungen und die Technik dahinter handeln - Fragen dazu werden wie immer im Forum der Linux Bibel behandelt. Wahrscheinlich werde ich nicht den kompletten Artikel auf einem Mal hinbekommen.

Bei den Linux-Audio-Systemen handelt es sich um:
  • OSS (Open Sound System) - Das erste Linux-Audio-System, es ist quasi nicht mehr existent, wird nur noch extrem selten genutzt
  • ALSA (Advanced Linux Sound Architecture) - ALSA wurde grundlegend deshalb geschaffen, um das veraltete OSS unter Linux zu ersetzen. Auch, wenn man heute oft nur von den gleich weiter beschriebenen Systemen hört, ohne ALSA geht so gesehen fast gar nichts.
  • Jack - Das einzige Linux-Sound-System, das auch ohne ALSA zurechtkommt. Jack wird vor allem dann genutzt, wenn es um die Musik-Produktion geht - siehe auch Professionelles Tonstudio unter Linux
  • PulseAudio - PulseAudio ist eine Erweiterung von ALSA, es wurde geschaffen, um bessere Ton-Qualität mit niedrigerer Latenz unter Linux zu bekommen
  • PipeWire - PipeWire ist eine Erweiterung von ALSA, es wurde geschaffen, um bessere Ton-Qualität mit niedrigerer Latenz unter Linux zu bekommen, es soll wohl irgendwann PulseAudio ersetzen
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Administrator
Beiträge: 1076
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz

Has thanked: 66 times
Been thanked: 590 times

Re: OSS, ALSA, Jack, Pulseaudio und Pipewire - Die Linux-Audio-Systeme

Beitrag von robertgoedl »

Die grundlegende Technik hinter dem Linux-Soundsystem

Grundlegend ist das Linux-Soundsystem in etwa so aufgebaut wie auch das Grafik-System - es handelt sich beim Audio-System um einen eigenen Server - also um OSS, ALSA und Jack. OSS wird in diesem Thema nicht mehr behandelt, da es grundsätzlich veraltet und nur noch bei extrem alten Anwendungen überhaupt noch zur Anwendung kommt.
sound-system.png
Die unterste Ebene ist natürlich die Hardware, also der Computer mit eingebauter und angeschlossener Hardware, auf diesem läuft das Betriebssystem mit dem Linux-Kernel. Auf dem Linux-Kernel laufen wiederum Anwendungen mit Audio-Ein- und Ausgabe. Diese Audio-Ein- und Ausgabe übernimmt der Sound-Server - also ALSA oder Jack (in Echtzeit). ALSA und Jack können diese Audio-Ein- und Ausgabe direkt übernehmen oder ALSA kann diese auch für bessere Qualität an Erweiterungen wie PulseAudio oder PipeWire weiter geben.
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Administrator
Beiträge: 1076
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz

Has thanked: 66 times
Been thanked: 590 times

Re: OSS, ALSA, Jack, Pulseaudio und Pipewire - Die Linux-Audio-Systeme

Beitrag von robertgoedl »

ALSA (Advanced Linux Sound Architecture)

ALSA ist nun also so gesehen einer der beiden Sound-Server unter Linux. Der Sound-Server übernimmt die Eingabe und Ausgabe von Tönen. ALSA kann mit bis zu acht Soundkarten gleichzeitig umgehen, diese werden von 0 bis 7 nummeriert (0 ist dabei natürlich die erste Soundkarte, 7 die achte). Eine Soundkarte wird nun auch als "card" bezeichnet - ALSA kann also mit "card 0" bis "card 7" gleichzeitig umgehen.

Eine Soundkarte (card) besteht unter ALSA nun wieder aus mehreren "devices" - Geräten - dies sind "playback" (Abspielen), "capture" (Aufnahme), "control", "timer" und "sequencer" - die letzten drei sind für uns eher unwichtig.

Eine Soundkarte kann wiederum mehreren Geräten - sogenannten "subdevices" bestehen, dabei handelt es sich etwa um Ein- und Ausgänge für Lautsprecher / Mikrophone.

Welche Soundkarten wurden erkannt / sind eingebaut?

Nun wollen wir uns erst einmal ansehen, welche eingebauten / angeschlossenen Soundkarten vom Linux-Kernel erkannt wurden. Hierzu genügt der Befehl:

Code: Alles auswählen

cat /proc/asound/cards
sound.jpg
Hier noch einmal als Text:

Code: Alles auswählen

0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xb121c000 irq 148
Hierbei handelt es sich nicht um zwei Geräte, sondern ein Gerät mit "subdevice"."HDA-Intel - HDA Intel PCH" ist also nicht nur die einzige Soundkarte - sondern auch die primäre Soundkarte - "0". Die Bezeichnung der Soundkarte lautet in diesem Fall "PCH".

Welche Karte nun wirklich als primäre Soundkarte genutzt wird, wird in der Datei "/usr/share/alsa/alsa.conf" geregelt, hierzu dient vor allem der Bereich:

Code: Alles auswählen

#
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0
defaults.pcm.subdevice -1
defaults.pcm.nonblock 1
defaults.pcm.compat 0
...
...
...
defaults.timer.card 0
defaults.timer.device 0
defaults.timer.subdevice 0
Mit der Ziffer am Ende der Zeile wird die Karte festgelegt - siehe voriger Befehl - an dieser Datei sollte man jedoch nicht unbedingt Hand anlegen.

Die meisten Profis setzen Problemen auf eine eigene versteckte Datei in ihrem Home-Verzeichnis, diese Datei gilt es manuell anzulegen. Sie nennt sich ".asoundrc". Hier der passende Inhalt:

Code: Alles auswählen

pcm.snd_card {
        type hw
        card 0
        device 0
}

ctl.snd_card {
        type hw
        card 0
        device 0
}
Mit dem Befehl "cat /proc/asound/cards" werden wie schon beschrieben die Bezeichnungen ermittelt und anschließend als "snd_card" eingesetzt. In meinem Beispiel also:

Code: Alles auswählen

pcm.PCH {
        type hw
        card 0
        device 0
}

ctl.PCH {
        type hw
        card 0
        device 0
}
Hier könnte man nun natürlich auch weitere Karten einfügen, "0" ist die primäre Karte, "1" bis "7" untergeordnete - Beispiel:

Code: Alles auswählen

pcm.PCH {
        type hw
        card 0
        device 0
}

ctl.PCH {
        type hw
        card 0
        device 0
}

pcm.CX8801 {
        type hw
        card 1
        device 1
}

ctl. CX8801{
        type hw
        card 1
        device 1
}
Hiermit wurde nun also die Initialisierung - die primäre Soundkarte festgelegt. Mit dem Befehl:

Code: Alles auswählen

aplay -l
sound-1.jpg
lässt sich anzeigen, was die Ausgänge der Audio-Karte eigentlich können. Je nach Karte können hier nun mehrere Ausgänge vorhanden sein und natürlich genutzt werden. In der Ausgabe oben finden Sie die Bezeichnung "subdevice #0", "Analog" oder auch "HDMI" - welcher Ausgang tatsächlich genutzt werden soll wird in der Datei nun mit "device" angegeben.

Alsamixer

Alsamixer ist eine Software, die bei extremen Problemen helfen kann. Die Software findet auch Kanäle, auf die die grafische Oberfläche aus welchen Gründen auch immer nicht zugreifen kann. Sie wird am Terminal mit dem Befehl:

Code: Alles auswählen

alsamixer
gestartet:
alsamixer.jpg
Mit F3 bis F5 wechseln Sie zwischen den einzelnen Modi (Eingabe, Ausgabe und alle, je nach Soundkarte verschieden):
alsamixer-1.jpg
Sind mehrere Karten eingebaut, gilt es erst die gewünschte zu ermitteln - also:

Code: Alles auswählen

cat /proc/asound/cards
0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xb121c000 irq 148
In diesem Fall will ich die erste Soundkarte nutzen - also "0", diese wird im Befehl nun mit "hw:0" angegeben:

Code: Alles auswählen

alsamixer -D hw:0
Mit den Pfeil-Tasten wählen Sie den Kanal und regeln die Lautstärke.

amixer

Manche Nutzer arbeiten bei Problemen - etwa weil das System die falsche Soundkarte ansteuert, lieber mit Scripts (die dann automatisch beim Anmelden gestartet werden).

Nehmen wir ein einfaches Script zur Auswahl der Karte, in diesem Fall soll "0" - in meinem Beispiel mit der Bezeichnung "PCH" wieder die primäre Soundkarte sein:

Code: Alles auswählen

#!/bin/bash
amixer sset 'PCM' 50%
amixer kann bei vielen Problemen helfen, so zeigt die Manpage mit:

Code: Alles auswählen

man amixer
alle Möglichkeiten.

alsactl

Hat man mit alsamixer Einstellungen vorgenommen, hilft nun der Befehl:

Code: Alles auswählen

alsactl
mit seinen Optionen beim Speichern dieser, dem Wiederherstellen dieser und mehr. Man schreibt den Befehl zum Wiederherstellen in ein Script und lässt dieses beim Anmelden am Desktop ausführen. Hier die grundlegenden Befehle (alle als Administrator):

Die aktuellen Einstellungen speichern:

Code: Alles auswählen

alsactl store
Die gespeicherten Einstellungen wiederherstellen:

Code: Alles auswählen

alsactl restore
Alle Einstellungen auf Standard zurücksetzen:

Code: Alles auswählen

alsactl init
Auch hier hilft:

Code: Alles auswählen

man alsactl
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Administrator
Beiträge: 1076
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz

Has thanked: 66 times
Been thanked: 590 times

Re: OSS, ALSA, Jack, Pulseaudio und Pipewire - Die Linux-Audio-Systeme

Beitrag von robertgoedl »

Pulseaudio

PulseAudio ist wie weiter oben beschrieben eine Erweiterung für ALSA. Haben früher mehrere Anwendungen gleichzeitig auf die Soundkarte zugegriffen (etwa Musik und Systemsounds), ist es gerne zu Verzögerungen oder Knacken gekommen - mit PulseAudio ist dies nicht mehr der Fall. GNOME und KDE, weitere andere nutzen inzwischen PulseAudio als Standard zur Audio-Aus- und Eingabe - werden dadurch auch automatisch installiert.

Nur bei Problemen - etwa weil die falsche Soundkarte genutzt wird, ist auch wirklich eine Konfiguration nötig - hierzu widmen wir uns wieder unserer schon oben beschriebenen ".asoundrc", folgender Zusatz zur bestehenden Konfiguration:

Code: Alles auswählen

pcm.pulse {
   type pulse
}
ctl.pulse {
   type pulse
}
Anschließend geht man als Administrator mit einem Editor an die Datei "/etc/pulse/system.pa". Wie üblich erfragt man mit:

Code: Alles auswählen

cat /proc/asound/cards
die eingebauten / angeschlossenen Soundkarten und fügt die gewünschte Karte nun mit folgenden neuen Zeilen ein (in diesem Fall die Karte "0"):

Code: Alles auswählen

load-module module-alsa-sink device=hw:0
load-module module-alsa-source device=hw:0
Geht es darum ein 5.1 Soundsystem nur mit Stereo anzusteuern - und man möchte nicht nur bei den vorderen beiden Lautsprechern etwas hören, geht man an die Datei "/etc/pulse/daemon.conf" und fügt folgende Zeile ein:

Code: Alles auswählen

default-sample-channels = 6
Mit PulseAudio lassen sich auch mehrere Soundkarten für unterschiedliche Lautsprecher nutzen. Hierzu geht man erst als Admin an die Datei "/etc/pulse/default.pa" und erstellt folgende beiden Zeilen:

Code: Alles auswählen

load-module module-alsa-sink device=front
load-module module-alsa-sink device=rear
"device" ersetzt man hierbei durch das Gerät, etwa "hw:0".

Und anschließend als normaler Nutzer wieder an seine ".asoundrc":

Code: Alles auswählen

pcm.pulsefront {
    type pulse
    device front
}
pcm.pulserear {
    type pulse
    device rear
}

ctl.pulsefront {
    type pulse
    device front
}
ctl.pulserear {
    type pulse
    device rear
}
Auch hier - "device" wird durch die Hardware ersetzt.

Sollten Soundkarten unter Linux mit PulseAudio nicht erkannt werden, gehen Sie als Administrator mit einem Editor an die Datei "/etc/pulse/default.pa" und ändern folgende Zeilen:

Code: Alles auswählen

#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
in folgende:

Code: Alles auswählen

load-module module-alsa-sink device=hw:0
load-module module-alsa-source device=hw:0
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Administrator
Beiträge: 1076
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz

Has thanked: 66 times
Been thanked: 590 times

Re: OSS, ALSA, Jack, Pulseaudio und Pipewire - Die Linux-Audio-Systeme

Beitrag von robertgoedl »

PipeWire

Wir kennen nun den Standard-Server ALSA, ohne diesen geht recht wenig. Auch kennen wir PulseAudio - PulseAudio ist bisher ebenso Standard für den einfachen Nutzer gewesen. Jetzt kommt PipeWire - es handelt sich hier ebenfalls um eine Erweiterung für ALSA, aber hier eben für Nutzer, die mit PulseAudio nicht zufrieden sind.

Grundsätzlich einmal, selbst auf Fedora ist PipeWire noch einigermaßen experimentell - zumindest zum Zeitpunkt dieses Artikels. Es funktioniert, aber es kann Probleme geben. Verfügbar ist diese Audio-Lösung jedoch auch unter Debian schon. Installiert wird diese Lösung wie unter auf Debian basierenden Linux-Distributionen ganz einfach über die Paket-Verwaltung durch das Paket "pipewire".

Möchten Sie PulseAudio durch PipeWire ersetzen (wie gesagt, es ist noch experimentell - selbst ich mache mir die Arbeit noch nicht), legen Sie als Administrator am Terminal erst einmal die Datei "/etc/pipewire/media-session.d/with-pulseaudio" an:

Code: Alles auswählen

touch /etc/pipewire/media-session.d/with-pulseaudio
Weiter legen Sie die Konfiguration für Systemd an, ebenfalls als Administrator:

Code: Alles auswählen

cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/
Nun geht es weiter als normaler Nutzer um PipeWire zu starten:

Code: Alles auswählen

systemctl --user daemon-reload
systemctl --user --now disable pulseaudio.service pulseaudio.socket
systemctl --user --now enable pipewire pipewire-pulse
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Administrator
Beiträge: 1076
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz

Has thanked: 66 times
Been thanked: 590 times

Re: OSS, ALSA, Jack, Pulseaudio und Pipewire - Die Linux-Audio-Systeme

Beitrag von robertgoedl »

Jack - Echtzeit-Audio-Server

Bei Jack handelt es sich um einen professionellen Echtzeit-Audio-Server. Vor allem wird dieser für professionelle Audio-Produktionen genutzt - etwa in Musik-Studios. Mehr hierzu findet sich unter Professionelles Tonstudio mit Linux
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Antworten Vorheriges ThemaNächstes Thema

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 0 Gäste