willy4711 hat geschrieben: 17.05.2021 00:50:31
Was haben wir dann so im Angebot ?
ALSA ----> dann PA -- Jack --- OSS oder (neu) PipeWire
Wenn ich es richtig verstehe, sieht es wie folgt aus:
alsa ist Bestandteil des Kernels, in der Regel als Module => /lib/modules/5.12.1/kernel/sound/
alsa stellt die Schnittstellen / devices zu den Soundkarten (audiointerface) zur Verfügung. Welche das sind sieht man unter /proc/asound/cards. Typisch dürfte etwa sein:
Code: Alles auswählen
0 [HDMI ]: HDA-Intel - HDA ATI HDMI
HDA ATI HDMI at 0xfcea0000 irq 67
1 [Generic ]: HDA-Intel - HD-Audio Generic
HD-Audio Generic at 0xfcd00000 irq 69
2 [Loopback ]: Loopback - Loopback
Loopback 1
Wenn man unter /proc/asound/cardX nach sieht, kann man erkennen, was im Einzelnen vorhanden ist:
HDMI
Code: Alles auswählen
ls /proc/asound/card0/
(...) id pcm10p pcm11p pcm3p pcm7p pcm8p pcm9p
GENERIC
Bei HDMI gibt es sechsmal pcmXp, jedoch kein pcmXc. Das "P" am Ende steht für play/Wiedergabe, das "C" für capture/Aufnahme. Das heißt, mein HDMI-Audiointerface stellt insgesamt 6 Kanäle bereit, die zur Ausgabe von Sound genutzt werden können. Es ist der Soundchip auf der Grafikkarte, der über das HDMI-Kabel (und wohl auch DisplayPort) auch Surroundsound senden kann.
Bei GENERIC gibt es nur einmal pcm0p sowie zwei pcmXc, also zwei Aufnahmeeingänge (die unterscheiden sich bei mir nur in der Bezeichnung: "ALC892 Analog" und "ALC892 ALT Analog"). Wieso das zwei Aufnahmegeräte sind, weiß ich nicht., Ich vermute, das eine ist für den Mikroeingang zuständig, das andere für internen Sound.
Gibt man
ein, so wird entweder "closed" oder wenn man etwa einen FIlm im Browser ansieht zB
ausgegeben. Stoppt man die Wiedergabe im Browser wird es wieder zu => "closed". Spielt man Musik über ein anderes Programm, ändert sich der Status von closed wieder zu:
Es ist dieselbe pid. Es nutzt nur ein Prozess ein audiointerface.
Das heißt, pipewire ersetzt nicht alsa, sondern soll typischerweise die Programme ersetzen, die auf die Schnittstellen zugreifen.
=> pulseaudio
=> alsa-utils
=> jack
Pulseaudio oder jack werden dazu verwendet, verschiedene Audiostreams zu sammeln und zusammen dann an das audiointerface zu senden.
Wenn ich pulseaudio von dem Interface trenne und stattdessen jack benutze, ändert sich die owner_pid
Mit laufendem pipewire soll es egal sein, ob man nun vlc, einen browser oder eine Pro-Audio-Software verwendet. Starte ich zB eine jack-Anwendung, erscheint mit laufendem pipewire:
und
Code: Alles auswählen
ps aux | grep 1297
==> 1297 0.0 0.2 145376 42480 ? S<sl 09:57 0:01 /usr/bin/pipewire
zeigt, dass das Gerät von pipewire genutzt wird.
Nun hat pulseaudio Vorteile und Nachteile. Einen Nachteil kann man selbst ausprobieren. Wenn man einen sehr kurzen Ton von vielleicht 1/3 sec. Dauer wiedergibt (Fingerschnippen), ist der Ton schon wieder zu Ende, bevor überhaupt der Wiedergabeprozess gestartet ist. Man hört nichts. Umgekehrt hat das den Vorteil, dass zB Strom gespart wird, denn wenn es nichts zu tun gibt, ist das Interface "closed". Wenn man hingegen jack nutzt, wird der kurze Ton wiedergegeben. Mit pipewire will man nun beides erreichen. Mit jack gibt es andere Möglichkeiten. Ich kann zB diverse Effekte hintereinander schalten. Ich kann also bestimmen, dass mein Signal an diverse Anwendungen weitergeleitet wird, also etwa vom Plattenspieler zu irgend einem Kratzerreduzier-Effekt, dann an einen Equalizer und dann an audacity zum Aufnehmen und zugleich an ein ein Playbackdevice, zum Anhören des bearbeiteten Signals.
Daneben gibt es laut pipewire noch Sicherheitsaspekte, weil pa oder jack im userspace laufen und insbesondere mit flatpack-Kram über irgendwelche Anwendungen auf die Hardware zugegriffen werden kann. Wenn ich es richtig verstehe, geht es unter anderem darum, was bei den Handys üblich ist. Jemand installiert sich irgend ein Flatpack, das dann die Aufzeichnungen deiner Webcam irgendwohin sendet, ohne dass du darüber informiert wirst.