Pulseaudio

Aus wiki.archlinux.de
Version vom 16. Dezember 2008, 02:50 Uhr von Cdh (Diskussion | Beiträge) (Die Seite wurde neu angelegt: {{Unvollständig}} Hier werde ich den Englischen Text übersetzen und teilweise mit meinen eigenen Erfahrungen anreichern. Allerdings habe ich keine Ahnung, ob das, wa...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!


Hier werde ich den Englischen Text übersetzen und teilweise mit meinen eigenen Erfahrungen anreichern. Allerdings habe ich keine Ahnung, ob das, was ich getan habe, die Sicherheit beeinträchtigt, oder in der Art auch so gemacht werden soll.

Einleitung

PulseAudio ist ein Soundserver für POSIX und Win32 Systeme. Er ermöglicht, dass mehrere Programme gleichzeitig Sound auf einem Computer ausgeben und hat viele weitere Features. PulseAudio ist ein direkter Ersatz für den Enlightened Sound Daemon (esd).

Pulseaudio ist KEIN direkter Ersatz für aRts. Wenn du KDE benutzt, kannst du momentan PulseAudio nicht benutzen. (Ist das noch aktuell? Bei meinem Versuch mit KDEmod hatte ich mit Phonon keinen großen Erfolg, auch wenn das Xine Backend einen entsprechenden Output angeboten hat? Oder bezieht sich das auf KDE3?)

Dieser Artikel beschreibt hauptsächlich die grundlegenden Features von Pulseaudio.


Installation

Alle Pakete sind im community Repository vorhanden, du musst dieses also aktiviert haben. Um PulseAudio zu installieren:

pacman -Sy pulseaudio 

Optional kannst du GTK Front-ends für Pulseaudio installieren (empfohlen):

pacman -Sy padevchooser paman paprefs pavucontrol

Für Anwendungen, die zwar PulseAudio nicht unterstützen, aber ALSA, ist es empfohlen, das PulseAudio Plugin für die alsalibs zu installieren. Dieses Plugin ist im alsa-plugins Paket.

pacman -Sy alsa-plugins


Direkter Ersatz für ESD (EsounD)

Aktuelle GNOME Versionen unterstützen den Start von ESD schon beim Einloggen. Weil Pulseaudio als direkter Ersatz für ESD verwendet werden kann, kannst du GNOME täuschen, damit der PulseAudio Daemon statt dem traditionellen ESD Daemon gestartet wird. Um dieses Verhalten zu erreichen, benutzt man das esdcompat script, das mit PulseAudio intsalliert wird. Erstelle einen symlink von /usr/bin/esd zu diesem script:

ln -sf /usr/bin/esdcompat /usr/bin/esd

Fertig. Jetzt sollte GNOME PulseAudio automatisch bei jedem login laden und verwenden

(Ist das alles noch aktuell? Wenn pulseaudio als system wide daemon läuft, wird das ganze nicht mehr benötigt, richtig?)

Pulseaudio benutzt standardmäßig einen anderen Socket (/tmp/.esd-xxxx) als das Originale ESD, um zu verhindern, dass verschiedene Benutzer auf den gleichen Socket zugreifen. Wenn du willst, dass gnome ESD automatisch als Benutzer startet (eigentlich esdcompat), bearbeitest du die Datei /etc/pulse/default.pa, damit PulseAudio den StandardSocket benutzt, wie es viele GNOME Programme erwarten. Finde die Zeile "load-module module-esound-protocol-unix" und ändere sie wie folgt:

load-module module-esound-protocol-unix socket=/tmp/.esd/socket

Das funktioniert nur, wenn du der einzige Benutzer auf diesem Computer bist. Sobald der nächste Benutzer gnome auf dem gleichen Computer startet, werden Probleme auftreten. Ein Lösungsansatz für dieses Problem ist, esdcompat auf einer Serverbasis zu starten. Ich (der englische Originalautor) habe diese Zeile nicht bearbeitet, weil auf meinem Ubuntu auch so alles funktionierte, also probierte ich das Gleiche mit Arch und es funktionierte auch.


Konfiguration

Das sind Instruktionen für nach der Installation, die auch gegeben sind ,wenn du PulseAudio mit dem Commandline Interface installierst (CLI- Das Terminal). (?). Zuerst musst du den PulseAudio Daemin in die /etc/rc.conf eintragen. (Hier wird Pulseaudio eindeutig als system-wide daemon konfiguriert). Beispiel:

DAEMONS=(syslog-ng ipw3945d network netfs crond fam hal avahi-daemon pulseaudio)

Um den PulseAudio Device Chooser (padevchooser) zu verwenden, fügst du am Besten auch avahi-daemon zu der Liste hinzu.

Dann musst du deinen Benutzer zu der Gruppe pulse-access hinzufügen, auch root (wenn root sound haben soll). (Hier hatte ich schon ein Problem. PulseAudio legt bei mir den .pulse-cookie in /var/run/pulse mit nur User Leserechten für den User pulse an, sonst sind keinerlei Rechte gesetzt. .pulse-cookie gehört pulse:pulse ich verstehe nicht ganz, was das mit pulse-access soll?)

gpasswd -a <user> pulse-access

Jetzt musst du nur noch alle Programme, die mit PulseAudio arbeiten sollen, eingestellt werden, möglicherweise durch ein Plugin.

Anmerkung: Soweit ich das mitbekommen habe, muss man die Netzwerkeinrichtung durchführen, wenn man PulseAudio als System-Wide Daemon verwenden will, wie in diesem Artikel beschrieben.

Mehr als zwei Lautsprecher ansteuern

Da ich ein 5.1 System benutze, habe ich natürlich auch gerne aus allen Lautsprechern Sound. Dies erreicht man, indem man in der Datei /etc/pulse/daemon.conf diese Zeile sucht und dementsprechend abändert:

default-sample-channels = 6

Achtung, hier wird nicht jede Anzahl genommen, bei 5 startet Pulseaudio nicht.

Konfiguration des Alsa Plugins

Es wird empfohlen, das ALSA Plugin für PulseAudio zu konfigurieren, da die meisten Programme ALSA benutzen. Das wird mit dem PulseAudio Plugin für alsalibs gemacht. Um ALSA dazu zu bringen, PulseAudio zu benutzen, müssen wir /etc/asound.conf (empfohlen) oder ~/.asoundrc bearbeiten, damit diese Zeilen darin stehen:

pcm.pulse {
   type pulse
}
ctl.pulse {
   type pulse
}

pulse in pcm.pulse und ctl.pulse ist nur ein Name, den du verändern kannst, dann verändern sich aber auch die nächsten Schritte entsprechend.

Wenn du willst, dass ALSA standardmäßig PulseAudio benutzt, solltest du zusätzlich in die /etc/asound.conf oder ~/.asoundrc Folgendes eintragen:

pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}

Wenn du pulse als dein Standardgerägt eingestellt hast, musst du entweder dein Hardwaregerät (?) in etc/pulse/default.pa eintragen, Beispiel:

load-module module-alsa-sink device=hw:0
load-module module-alsa-source device=hw:0

Oder du kannst die automatische Erkenntung mittels hal benutzen:

load-module module-hal-detect

Diese Zeile sollte schon in /etc/pulse/default.pa stehen, versichere dich, dass sie nicht auskommentiert ist.

Wenn du pulse nicht als Standardgerät für ALSA eingestellt hast, musst du in jedem Programm "pulse" einstellen, damit es PulseAudio benutzt.


Konfiguration SDL für PulseAudio

Seit Version 1.2.12 unterstützt SDL nativen PulseAudio Support. Füge diese Zeile in deine .profile oder Ähnlich ein:

export SDL_AUDIODRIVER="pulse"

Andere Umgebungsvariablen: PASERVER ist der Computer, auf dem der PulseAudio Server läuft, PADEVICE ist das Gerät auf dem Server. (Aus dem Englischen wiki: Der "pulse" Treiber kann bisher noch nicht deine pulseaudio Konfiguration auslesen, wie es aussieht. <- Keine Ahnung, ob das noch aktuell ist?) Anmerkung: Bei mir hat SDL noch nie richtig funktioniert, hat immer furchtbar gestottert, auch ohne Pulseaudio. Ich habe cgelesen, dass das an meiner HDA Intel Soundkarte liegt. Keine Ahnung. Jedenfalls funktioniert der Ton gut, wenn man in dem SDL Programm den Buffer vergrößern kann. Bei dem Spiel prey zum Beispiel musste ich in der Datei ~/.prey/base/preyconfig.cfg den Wert so anpassen:

seta s_sdlSamples "2048"

(Von vormals 512)

Wenn dies nicht funktioniert oder du eine alte SDL Version benutzt:

export SDL_AUDIODRIVER="esd"

Aus dem englischen Wiki: Du kannst ABS benutzen, um SDL mit PulseAudio support zu kompilieren, bis die Qualität des Treibers upstream gefixt ist. Bitte benutze den Patch hier: SDL Pulseaudio Patch ??? Ist das noch aktuell? Keine Ahnung.

Konfiguration von GStreamer für PulseAudio

Damit GStreamer PulseAudio benutzt, musst du gstreamer0.10-pulse installieren und /system/gstreamer/0.10/default/audiosink sowie /system/gstreamer/0.10/default/audiosrc für PulseAudio setzen, entweder mit dem gconf-editor oder CLI):

pacman -Sy gstreamer0.10-pulse
gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink
gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosrc pulsesrc

Alternativ kanst du gstreamer-properties benutzen, um die gconf Einträge zu setzen;

gstreamer-properties

Den OSS Wrapper für PulseAudio verwenden

Wenn du ein Programm benutzen willst, das OSS benutzt, kannst du es mit padsp mit Pulseaudio benutzen.

$ padsp OSSprogram

Beispiele:

$ padsp aumix
$ padsp sox foo.wav -t ossdsp /dev/dsp

Bei mir läuft wine mit alsa nicht besonders gut mit PulseAudio, mit OSS und padsp habe ich dagegen keine Probleme. So stellt man das ein:

padsp winecfg

Auf Audio wechseln und das Häkchen bei Alsa wegmachen und bei OSS setzen.

Jetzt müssen alle wine Programme, statt mit "wine" mit "padsp wine" gestartet werden. Evtl kann man da ein kleines Script starten, das das übernimmt.

PulseAudio übers Netzwerk

Eine der großen Stärken von PulseAudio ist die Möglichkeit, Audio über TCP beliebig zu streamen. Dazu braucht man das Modul module-native-protocol-tcp und man muss den pulse-cookie auf die clients kopieren. Um das TCP Modul zu aktivieren, füge zu /etc/pulse/default.pa hinzu (oder entferne das Kommentarzeichen):

load-module  module-native-protocol-tcp


Wenn du PulseAudio als systemweiten Daemin laufen lässt, was für Netzwerksound Sinn macht, befindet sich der Cookie in /var/run/pulse/.pulse-cooie. Dieser Cookie muss an den Client gesendet werden und irgendwo platziert werden, wo die pulse-access Gruppe Leserechte hat (und mit Berechtigungen, dass nur sie ihn lesen können) (?).

scp /var/run/pulse/.pulse-cookie client:/etc/pulse-cookie
chown pulse:pulse-access /etc/pulse-cookie
chmod 640 /etc/pulse-cookie

Der Pulse Client muss wissen, wo er nach dem Cookie suchen muss. In /etc/pulse/client.conf:

### Cookie file
cookie-file = /etc/pulse-cookie

Dann muss der Client konfiguert werden, um auf den entsprechenden Server zuzugreifen. Wieder /etc/pulse/client.conf:

## The default server to connect to
default-server = 192.168.0.5

Fertig.

Anmerkungen:

  • Diese Netzwerkkonfiguration scheint notwendig, um PulseAudio als Systemwide Daemon laufen zu lassen!
  • Den pulse cookie kopieren, hat bei mir nie so Recht geklappt, auch mit Symlinks nicht.
  • Der Pulsecookie wird so erstellt, dass ausschließlich der Benutzer pulse ihn LESEN darf. Nicht gut.

In die Datei /etc/rc.d/pulseaudio habe ich vor die Zeile add_daemon pulseaudio geschrieben:

chmod a+r /var/run/pulse/.pulse-cookie
chmod a+r /var/run/pulse/.esd_auth

Jetzt darf jeder den Cookie von Pulseaudio lesen. Was mit esd_auth ist, weiß ich nicht, aber einige Programme wollen auch den lesen.

In /etc/pulse/client.conf habe ich eingetragen:

default-server = <meine IP>
cookie-file = /var/run/pulse/.pulse-cookie

So funktioniert bei mir alles.

Links

http://www.pulseaudio.org/wiki/PerfectSetup http://www.alsa-project.org/main/index.php/Asoundrc http://www.pulseaudio.org/ http://mpd.wikia.com/wiki/PulseAudio#Version_0.12.0_and_later