Pulseatio -Emulation für ALSA.
Das Programm bietet eine alternative teilweise Implementierung der Pulseatio -API. Es besteht aus einem Laderskript und einer Reihe gemeinsamer Bibliotheken mit den gleichen Namen wie aus dem ursprünglichen Pulsaudio, sodass Anwendungen sie dynamisch laden und glauben, sie sprechen mit Pulseatio. Intern wird kein separates Soundmischungs -Daemon verwendet. Stattdessen stützt sich Apulse auf die dmix , dsnoop und plug von ALSA, um mehrere Schallquellen zu verarbeiten und gleichzeitig zu fangen Streams. dmix Plugin muxes mehrere Wiedergabestreams; dsnoop -Plugin ermöglicht es mehreren Anwendungen, von einem einzelnen Mikrofon aus zu erfassen. und plug -Plugin konvertiert transparent Audio zwischen verschiedenen Probenformaten, Probenraten und Kanalnummern. Seit mehr als einem Jahrzehnt verfügt ALSA mit aktivierten und standardmäßig konfigurierten Plugins.
apulse war nicht als Drop-In-Austausch von Pulseaudio ausgelegt. Es ist sinnlos, da dies nur eine Neuimplementierung des originalen Pulsaudio mit derselben Client-Daemon-Architektur ist, die nach dem vollständigen Feature-Set erforderlich ist. Stattdessen werden nur Teile der API implementiert, die für bestimmte Anwendungen von entscheidender Bedeutung sind. Deshalb gibt es ein Loader -Skript mit dem Namen apulse . Es aktualisiert den Wert der Umgebungsvariablen LD_LIBRARY_PATH , um auch auf das Verzeichnis zu zeigen, in dem die Bibliotheken von Apulse installiert werden, sodass sie der Anwendung zur Verfügung stehen.
Der Name stammt aus Namen von ALSA und Pulseaudio. Da aoss eine Kompatibilitätsschicht zwischen OSS -Programmen und ALSA war, wurde apulse als Kompatibilitätsschicht zwischen Pulseaudio -Anwendungen und ALSA ausgelegt.
Sie benötigen ALSA -Bibliotheken und Glib installiert. Auf Debian-basierten Verteilungen befinden sie sich in Paketen libasound2-dev und libglib2.0-dev .
Ausführen im Quellverzeichnis zum Erstellen und Installieren:
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
Dadurch wird ein Verzeichnis namens build erstellt und dort erbaut. Es ist möglich, einfach durch das Ausführen als root make install , wie oben gezeigt. Sie können jedoch nicht installierte Dateien deinstallieren. Aus diesem Grund wird empfohlen, Dateien in ein Paket einzuwickeln. Verwenden Sie checkinstall oder eine Alternative.
Wenn Sie 32-Bit-Binärdateien auf einer 64-Bit-Maschine (zum Beispiel für Skype) möchten, verwenden Sie:
$ mkdir build && cd build
$ CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
Neuere GLIB -Versionen verwenden verschiedene .pc -Dateien für i386 und amd64 . Verwenden Sie die Variable PKG_CONFIG_PATH , um pkg-config 32-Bit-Versionen zu finden. Auf Debian wird es also so etwas sein wie:
$ PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Es gibt eine Möglichkeit, zu konfigurieren, wo Apulse -Bibliotheken über APULSEPATH CMAKE -Variable installiert werden. Wenn Sie beispielsweise Bibliotheken in Standardpfad, /usr/lib installieren möchten, verwenden Sie Bibliotheken
cmake -DAPULSEPATH=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Wenn Bibliotheken auf einem regulären Bibliotheksweg installiert sind, müssen Sie keine Anwendungen über apulse -Wrapper ausführen.
$ apulse <program-name> [program-parameters]
Umgebungsvariablen APULSE_CAPTURE_DEVICE und APULSE_PLAYBACK_DEVICE können zum Konfigurieren von Erfassungs- und Wiedergabegeräten verwendet werden. Probieren Sie hw:0,0 , plughw:0,0 und dergleichen. Eine vollständige Liste der Gerätenamen finden Sie im ALSA -Benutzerhandbuch.
Standardmäßig werden Bibliotheken von apulse in ein separates Verzeichnis installiert, um sie vor allen Anwendungen zu verbergen.
Die meisten Anwendungen in freier Wildbahn, die sowohl Pulseaudio als auch ALSA unterstützen, versuchen, zu automatisieren, welches Soundsystem verwendet wird. Erstens versuchen Anwendungen, mit Pulseatio zu beginnen. Original Client -Bibliotheken scheitern früh, wenn kein Pulsaudio -Daemon ausgeführt wird oder gestartet werden kann. Dann wechseln sie zu ALSA. Die Entscheidung wird zu Beginn einmal getroffen. Es funktioniert gut mit Pulseaudio, funktioniert aber nicht mit apulse . Letztere hat keine Daemons, es sagt glücklich, dass alles in Ordnung ist und es in der Lage ist, Audio zu spielen. Bewerbungen versuchen dann, mehr Funktionen aufzurufen und schließlich unimplementierte Teile zu berühren, oft mit Abstürmen. Bibliotheken sind also versteckt und werden nur dann sichtbar, wenn ein Programm durch apulse -Wrapper -Skript aufgerufen wird.
Es ist möglich, Apulse -Bibliotheken an /usr/lib zu installieren. Wrapper -Skript wird nicht erforderlich, aber dann versuchen alle Anwendungen, Pulseaudio -API zu verwenden, obwohl sie ALSA verwenden können.
Es gibt die RPATH -Eigenschaft des ausführbaren ELF -Formats, mit dem Pfade für die Suche nach dynamischen Bibliotheken angegeben werden. Es ist wie eine Variable ld_library_path, aber durchaus. Da das gesamte apulse -Launcher -Skript vor dem Start einer Anwendung den Wert ld_library_path festlegt, ist es möglich, Pfade an Apulse -Bibliotheken in die ausführbare Zieldatei selbst zu backen. Und so, um es wie gewohnt zu starten, ohne Helfer -Skript.
Zum Beispiel für Firefox wäre es:
# patchelf --set-rpath /usr/lib/apulse /usr/lib/firefox/libxul.so
Aus irgendeinem Grund funktioniert es nicht, wenn RPath für /usr/lib/firefox/firefox selbst festgelegt wird, sodass einige Experimente erforderlich sind, damit es funktioniert.
Ein großer Teil der Pulsaudio -API wird nicht implementiert. Es gibt Funktionen, die nichts tun und einige Schiedswerte zurückgeben. Wenn die Anwendung versucht, etwas nicht implementiert anzurufen, stürzt sie häufig ab, während sie versucht, einen Nullzeiger zu erfernen. Standardmäßig wird die Tracing -Ebene auf 0 gesetzt, was bedeutet, dass keine Nachrichten für die Standardausgabe gedruckt werden. Es ist möglich, diesen Wert auf 1 zu erhöhen, was nicht implementierte Funktionsaufrufe oder auf 2 anzeigt, was alle Funktionsaufrufe anzeigt.
Um die Ebene zu ändern, verwenden Sie beim Aufrufen von cmake mit dem WITH_TRACE . So etwas wie cmake -DWITH_TRACE=1 ..
Der Aufbau von Apulse mit Trace Level 1 wird keine Probleme beheben, hilft jedoch zumindest bei der Erkennung, ob Abstürze durch nicht implementierte Funktionen verursacht werden.
Apulse fungiert als generischer ALSA -Kunde. Es versucht, Audiogerät zu öffnen, und scheitert manchmal. Im Kern führt Apulse weder Audio -Mischung noch Resampling. Stattdessen stützt es sich auf Plugins plug , dmix und dsnoop -ALSA -Plugins, die normalerweise standardmäßig aktiviert sind. Diese Plugins verarbeiten mehrere Audioquellen, wodurch Resampling durchgeführt und transparent gemischt werden. Seit Jahren wird ALSA mit den aktivierten Plugins geliefert. Audio funktioniert nur, ohne etwas zu konfigurieren. Aber nicht jeder verwendet Standardeinstellungen.
Bei benutzerdefinierten Konfigurationen kann APULSE -Audio nicht ausgegeben und/oder erfassen. Es könnte überhaupt keinen Ton geben oder nur einen einzigen Audio -Stream, der nach dem anderen spielt. Es ist auch möglich, dass Adapter mit Hardware -Mixern, die mehrere Streams spielen können, möglicherweise immer noch mehrere Erfassungsströme verarbeiten können. Abhängig von Hardware benötigen Sie möglicherweise immer noch entweder dmix oder dsnoop -Plugins. Oder beides.
Mit anderen Worten, für die Funktionsweise von Apulse sollte Ihr Setup in der Lage sein, mehrere Streams gleichzeitig zu spielen und zu erfassen.
Wenn andere Anwendungen einwandfrei ausgeben, ist dies möglich, dass Sie sich selbst einschränken.
Zum Beispiel hat Firefox jetzt eine Sandbox, die den Dateizugriff blockiert. Es hat eine vordefinierte Liste der zulässigen Pfade, aber standardmäßig sind ALSA -Geräte nicht enthalten. Glücklicherweise ist es möglich, diesen Weg von Hand hinzuzufügen. Hinzufügen von "/dev/snd/" zu "Security.sandbox.content.write_path_whitelist" -Parameter in about:config . Beachten Sie, dass der nachverfolgende Schrägstrich in "/dev/snd/" erforderlich ist.
Firefox 58 (nächtlich) verschärfte seine Sandkasten ein bisschen mehr. Jetzt sind auch ioctl() -Aufrufe verboten, werden aber von ALSA -Bibliotheken verwendet. Dies führt zu einem Verletzung von Sandkasten bei der anschließenden Prozessabschluss. Die Ausnahme kann hinzugefügt werden, indem Parameter security.sandbox.content.syscall_whitelist festgelegt wird about:config Dieses Feld akzeptiert eine von Kommas getrennte Liste der Systemaufrufnummern. Fügen Sie dort 16 für x86-64 oder 54 für x86 oder arm hinzu.
Firefox 60 hat seine Inhalts -Sandbox mehr verteilt, aber gleichzeitig hat Audio -Zugriff von Inhaltsprozessen auf den Hauptprozess bewegt. Ab Firefox 60 sind keine Änderungen der Sandbox -Einstellungen erforderlich.
Der Quellcode wird unter den Bestimmungen der MIT -Lizenz verteilt. Siehe Lizenz.mit für Volltext.
/3rdparty/pulseaudio-headers enthält einen Teil des Pulseatio-Projekts und wird unter LGPLV2.1+ verteilt. Weitere Informationen finden Sie in den Inhalten der Dateien.