Pulseaudio: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
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...
 
plasma-pa ist das default applet für plasma
 
(36 dazwischenliegende Versionen von 16 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Unvollständig}}  
{{Unvollständig}}{{Artikelstil}}
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 ==
== 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 (vormals PolypAudio) ist ein Soundserver für POSIX und Win32 Systeme. Mit ihm können mehrere Programme gleichzeitig Sound auf einem Computer ausgeben, zudem hat er viele weitere Features.
PulseAudio ist Standard in den Desktopumgebungen wie GNOME oder KDE.  


Pulseaudio ist KEIN direkter Ersatz für aRts. Wenn du KDE benutzt, kannst du momentan PulseAudio nicht benutzen.
{{installation
(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?)
|repo=extra
|name=PulseAudio
|paket=pulseaudio
|zusatz=pulseaudio-alsa
|zusatzinfo=Für Programme die nur Alsa unterstützen}}


Dieser Artikel beschreibt hauptsächlich die grundlegenden Features von Pulseaudio.
* Zusätzlich kann man einige GTK Oberflächen für Pulseaudio installieren (empfohlen):


pacman -Syu  paprefs pavucontrol pavumeter


== Installation ==
* Um PulseAudio via Terminal zu steuern wird [https://aur.archlinux.org/packages/pulseaudio-ctl pulseaudio-ctl] benötigt.
Alle Pakete sind im community Repository vorhanden, du musst dieses also aktiviert haben. Um PulseAudio zu installieren:


pacman -Sy pulseaudio
* Optionales KDE plasma applet kann man installieren mit:
  pacman -S plasma-pa
Falls sie beim boot sich nicht connecten können sollte man in der Datei /etc/pulse/client.conf autospawn auf true setzen.


Optional kannst du GTK Front-ends für Pulseaudio installieren (empfohlen):
* Um übers Netzwerk PulseAudio zu steuern kann man sich PaWebControl installieren


pacman -Sy padevchooser paman paprefs pavucontrol
Ein (CLI) Mixer für die console kann man installieren via
  pacman -S ponymix


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.
== Das System für PulseAudio konfigurieren ==


pacman -Sy alsa-plugins
Normalerweise startet PulseAudio erst, sobald ein Benutzer es benötigt und nicht als systemweiter Dämon da dies einfacher, effizienter und sicherer ist. Falls du es doch als systemweiter Dämon brauchst, um z. B. mehrere Benutzer gleichzeitig laufen lassen zu können editiere die /etc/rc.conf wie folgt:


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


== Direkter Ersatz für ESD (EsounD) ==
Um den PulseAudio Device Chooser (padevchooser) zu verwenden, musst du eventuell auch den 'avahi-daemon' zu der Liste hinzufügen.  
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.
Danach solltest du die Benutzer zu der Pulse Gruppe hinzufügen:
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
  gpasswd -a benutzer pulse-access


Fertig. Jetzt sollte GNOME PulseAudio automatisch bei jedem login laden und verwenden
Es ist eine gute Idee dich zu der 'pulse-rt' hinzuzufügen was nicht automatisch gemacht wird. Dies kann zu Performanzverbesserungen führen:


(Ist das alles noch aktuell? Wenn pulseaudio als system wide daemon läuft, wird das ganze nicht mehr benötigt, richtig?)
  gpasswd -a <user> pulse-rt


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.
Damit PulseAudio mit dem Befehl startx startet , wird folgender Befehl in ~/.xinitrc benötigt
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
  exec start-pulseaudio-x11


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.


Bei der Fehlermeldung


== Konfiguration ==
Daemon startup failed
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)
sollte überprüft werden , ob dbus im DAEMON Array in der /etc/rc.conf vorhanden ist:


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


Dann musst du deinen Benutzer zu der Gruppe pulse-access hinzufügen, auch root (wenn root sound haben soll).
== Konfiguration des Alsa Plugins ==
(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
Es ist empfohlen ALSA und PulseAudio anzupassen, da die meisten Anwendungen ALSA verwenden. Dies wird wie oben beschrieben durch das PulseAudio plugin möglich. Damit ALSA PulseAudio verwendet muss man die /etc/asound.conf (empfohlen) oder die ~/.asoundrc editieren (Eventuell müssen diese erst erstellt werden):
 
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 {
  pcm.pulse {
Zeile 76: Zeile 66:
  }
  }


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.
Falls du PulseAudio als Standardgerät verwenden möchtest solltest du '''entweder''' die verwendete Hardware in /etc/pulse/system.pa spezifizieren:
 
  load-module module-alsa-sink device=hw:0
  load-module module-alsa-source device=hw:0
 
'''oder''' du verwendest HAL zur automatischen Erkennung:


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


pcm.!default {
Die Zeile ist normalerweise schon in /etc/pulse/system.pa vorhanden. Versichere dich, dass sie nicht auskommentiert ist.
    type pulse
Wenn du PulseAudio nicht als Standard für ALSA gesetzt hast, musst du in jedem Programm als Ausgabegerät 'pulse' einstellen, damit PulseAudio verwendet wird.
}
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:
== Mehr als zwei Lautsprecher ansteuern ==
Um zum Beispiel bei einem 5.1 Soundsystem nicht nur auf den beiden Front Lautsprechern etwas zu hören, wenn man nur Stereo ausgibt, passt man in der Datei /etc/pulse/daemon.conf die Anzahl der Lautsprecher an:
default-sample-channels = 6


load-module module-alsa-sink device=hw:0
Achtung, hier wird nicht jede Anzahl angenommen, bei 5 zum Beispiel startet Pulseaudio nicht.
load-module module-alsa-source device=hw:0


Oder du kannst die automatische Erkenntung mittels hal benutzen:


  load-module module-hal-detect
=== Konfiguration SDL für PulseAudio ===
Seit Version 1.2.12 unterstützt SDL nativen PulseAudio Support. Füge diese Zeile in deine .profile oder .bashrc ein:
  export SDL_AUDIODRIVER="pulse"


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


Wenn du pulse nicht als Standardgerät für ALSA eingestellt hast, musst du in jedem Programm "pulse" einstellen, damit es PulseAudio benutzt.
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?]


=== 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"
Anmerkung: Bei mir hat SDL noch nie richtig funktioniert, der Sound hat immer furchtbar gestottert, auch ohne PulseAudio. Ich habe gelesen, dass das an der HDA Intel Soundkarte liegt. Jedenfalls funktioniert der Ton gut, wenn man in dem SDL Programm den Buffer vergrößern kann.


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:
Bei dem Spiel prey zum Beispiel musste ich in der Datei ~/.prey/base/preyconfig.cfg den Wert so anpassen:
  seta s_sdlSamples "2048"
  seta s_sdlSamples "2048"
(Von vormals 512)
(Von vormals 512)


Wenn dies nicht funktioniert oder du eine alte SDL Version benutzt:
Wenn export SDL_AUDIODRIVER="pulse" nicht funktioniert oder du eine alte SDL Version benutzt, kannst du die esd Ausgabe benutzen, die auch von PulseAudio übernommen wird:
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: [http://0pointer.de/blog/projects/pa-plugin-for-sdl.html SDL Pulseaudio Patch]
[??? Ist das noch aktuell?]
 
=== GStreamer ===
Für eine Nutzung mit GStreamer sollte man {{Paket|gst-plugins-good|gst-plugins-good}} installieren.


export SDL_AUDIODRIVER="esd"
Mehr Infos über GStreamer hier: [https://wiki.archlinux.de/title/GStreamer klick mich] {{sprache|de}}


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: [http://0pointer.de/blog/projects/pa-plugin-for-sdl.html SDL Pulseaudio Patch]
=== Konfiguration von OpenAL für PulseAudio ===
??? Ist das noch aktuell? Keine Ahnung.
Spiele, die OpenAL benutzen PulseAudio als Standard.
Können aber explizit darauf konfiguriert werden:
    nano /etc/openal/alsoft.conf
    drivers=pulse,alsa


=== Konfiguration von GStreamer für PulseAudio ===
=== Konfiguration von libao 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 -Syu libao-pulse


pacman -Sy gstreamer0.10-pulse
Füge in /etc/libao.conf ein:
gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink
  default_driver=pulse
  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 ===
=== Mehrere PulseAudio ALSA Geräte ===
Wenn du ein Programm benutzen willst, das OSS benutzt, kannst du es mit padsp mit Pulseaudio benutzen.
PulseAudio kann mehrere verschiedene Soundkarten oder mehrere virtuelle PCMs einer Soundkarte (zum Beispiel, getrennte Front und Surround Ausgabekanäle) verwenden. Dazu muss man PulseAudio für mehrere ALSA sinks konfigurieren. In /etc/pulse/default.pa:
load-module module-alsa-sink device=front
load-module module-alsa-sink device=rear


$ padsp OSSprogram
Wenn der Client verschiedene Pulse/ALSA Ausgabegeräte haben soll, bearbeitet man die /etc/asound.conf oder ~/.asoundrc:


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


  $ padsp aumix
Und richtet die entsprechenden ctl Elemente ein:
  $ padsp sox foo.wav -t ossdsp /dev/dsp
ctl.pulsefront {
    type pulse
    device front
  }
  ctl.pulserear {
    type pulse
    device rear
}


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 wrapper ==
Wenn man ein Programm benutzen will, das OSS benutzt, kann man es mit padsp mit PulseAudio starten.
padsp OSSprogram


  padsp winecfg
Beispiele:
  padsp aumix
padsp sox foo.wav -t ossdsp /dev/dsp


Auf Audio wechseln und das Häkchen bei Alsa wegmachen und bei OSS setzen.
Man kann außerdem ein benutzerdefiniertes Skript erstellen.
/usr/local/bin/OSSProgram


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.
#!/bin/sh
exec padsp /usr/bin/OSSprogram "$@"


== PulseAudio übers Netzwerk ==
== 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):
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. Zusätzlich muss der pulse-cookie auf die Clients kopiert werden. Um das TCP Modul zu aktivieren, füge Folgendes in /etc/pulse/default.pa ein (oder entferne das Kommentarzeichen):
 
  load-module  module-native-protocol-tcp
  load-module  module-native-protocol-tcp


Wenn PulseAudio als systemweiter Daemon läuft, was für Netzwerksound Sinn macht, befindet sich der Cookie in /var/run/pulse/.pulse-cookie. 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).


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) (?).
[Hä?]


Um den Cookie per SSH von dem Server, auf dem der Sound ausgegeben werden soll, auf die Clients nach /etc/pulse-cookie zu kopieren (auf den Clients muss ein SSH Server laufen und man muss root-Rechte haben):
  scp /var/run/pulse/.pulse-cookie client:/etc/pulse-cookie
  scp /var/run/pulse/.pulse-cookie client:/etc/pulse-cookie


Auf den Clients müssen dann die Rechte richtig gesetzt werden. Als root:
  chown pulse:pulse-access /etc/pulse-cookie
  chown pulse:pulse-access /etc/pulse-cookie
  chmod 640 /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:
Immer noch auf dem Client: Der Pulse Client muss wissen, wo er nach dem Cookie suchen muss. In /etc/pulse/client.conf wird deshalb eingetragen:
 
  ### Cookie file
  ### Cookie file
  cookie-file = /etc/pulse-cookie
  cookie-file = /etc/pulse-cookie


Dann muss der Client konfiguert werden, um auf den entsprechenden Server zuzugreifen. Wieder /etc/pulse/client.conf:
Dann muss der Client konfiguriert werden, um auf den entsprechenden Server zugreifen zu können. Wieder in der /etc/pulse/client.conf:
 
  ## The default server to connect to
  ## The default server to connect to
  default-server = 192.168.0.5
  default-server = <die IP Adresse des Servers>


Fertig.
Fertig.


Anmerkungen:
== Problembehebung ==
* Diese Netzwerkkonfiguration scheint notwendig, um PulseAudio als Systemwide Daemon laufen zu lassen!
=== module-x11-publish ===
* Den pulse cookie kopieren, hat bei mir nie so Recht geklappt, auch mit Symlinks nicht.
Wenn Folgendes in den PulseAudio Logs auftaucht:
* Der Pulsecookie wird so erstellt, dass ausschließlich der Benutzer pulse ihn LESEN darf. Nicht gut.
x11wrap.c: XOpenDisplay() failed
In die Datei /etc/rc.d/pulseaudio habe ich vor die Zeile add_daemon pulseaudio geschrieben:
module.c: Failed to load  module "module-x11-publish" (argument: ""): initialization failed.
  chmod a+r /var/run/pulse/.pulse-cookie
main.c: Module load failed.
  chmod a+r /var/run/pulse/.esd_auth
  main.c: failed to initialize daemon.
Jetzt darf jeder den Cookie von Pulseaudio lesen. Was mit esd_auth ist, weiß ich nicht, aber einige Programme wollen auch den lesen.
Dann muss man das module-x11-publish in /etc/pulse/default.pa deaktivieren (auskommentieren):
#load-module module-x11-publish
 
=== "daemon startup failed" ===
Wenn PulseAudio nicht als Daemon startet und Folgendes ausgibt:
  E: main.c: daemon startup failed.
Muss man vielleicht die Zeile in /etc/pulse/default.pa deaktivieren, in der
.fail
steht.


In /etc/pulse/client.conf habe ich eingetragen:
Kommentiere diese Zeile einfach aus, indem du ein # davor schreibst.
  default-server = <meine IP>
 
  cookie-file = /var/run/pulse/.pulse-cookie
[Was soll das denn sein?]
 
Eine Lösung wäre, "dbus" in den Daemons Array von etc/rc.conf zu setzen.
 
=== module-hal-detect ===
Wenn eine Fehlermeldung wegen HAL, module-hal oder Ähnliches ausgegeben wird, wirst du module-hal-detect aus /etc/pulse/default.pa entfernen müssen und explizit die ALSA Hardware angeben, zum Beispiel:
  load-module module-alsa-sink device=hw:0
  load-module module-alsa-source device=hw:0
 
 
== GNOME älter als 2.18 ==
 
GNOME Versionen die älter sind als 2.18 unterstützen ESD und starten dies bei einem Sitzungsbeginn. Da man PulseAudio als Ersatz von ESD verwenden kann, gibt es eine Möglichkeit GNOME auszutricksen und anstatt von ESD PulseAudio beim Sitzungsbeinn zu laden. Um das zu erreichen musst du das '''esdcompat''' Skript einsetzten welches standardmäßig bei PulseAudio dabei ist.
 
Erstelle einen Systemlink von /usr/bin/esd der auf das Skript verweist:
 
  ln -sf /usr/bin/esdcompat /usr/bin/esd
 
Das war es schon. Nun sollte GNOME bei jeder Sitzung PulseAudio starten und verwenden.
PulseAudio verwendet standardmäßig jedes Mal einen anderen 'Anschluss' (/tmp/.esd-xxxx) im Gegensatz zu ESD um zu verhindern, dass mehrere Benutzer den gleichen Anschluss verwenden. Um zu verhindern das es nun Probleme gibt da sehr viele GNOME Anwendungen den Standardanschluss ansprechen wollen solltest du die Datei /etc/pulse/system.pa editieren. Such nach der Linie "load-module module-esound-protocol-unix" und editiere diese wie folgt:
 
  load-module module-esound-protocol-unix socket=/tmp/.esd/socket
 
Da funktioniert nur solange du der einzigste Benutzer an diesem System bist. Sobald ein zweiter hinzukommt wird es wohl zu Problemen kommen.


So funktioniert bei mir alles.


== Links ==
== Links ==
http://www.pulseaudio.org/wiki/PerfectSetup
http://www.pulseaudio.org/wiki/PerfectSetup
http://www.alsa-project.org/main/index.php/Asoundrc
http://www.alsa-project.org/main/index.php/Asoundrc
http://www.pulseaudio.org/
http://www.pulseaudio.org/
http://mpd.wikia.com/wiki/PulseAudio#Version_0.12.0_and_later
http://mpd.wikia.com/wiki/PulseAudio#Version_0.12.0_and_later
[[Kategorie:Multimedia]]
[[Kategorie:Sound]]
[[en:PulseAudio]]

Aktuelle Version vom 20. November 2020, 20:39 Uhr

Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!


Dieser Artikel oder Artikelabschnitt bedarf einer stilistischen Überarbeitung laut Empfehlungen in Artikelstil.


Einleitung

PulseAudio (vormals PolypAudio) ist ein Soundserver für POSIX und Win32 Systeme. Mit ihm können mehrere Programme gleichzeitig Sound auf einem Computer ausgeben, zudem hat er viele weitere Features. PulseAudio ist Standard in den Desktopumgebungen wie GNOME oder KDE.

Installation

PulseAudio ist als pulseaudio in extra verfügbar, und kann von dort mittels Pacman installiert werden.

# PulseAudio an sich
pacman -S pulseaudio

# Für Programme die nur Alsa unterstützen
pacman -S pulseaudio-alsa
  • Zusätzlich kann man einige GTK Oberflächen für Pulseaudio installieren (empfohlen):
pacman -Syu  paprefs pavucontrol pavumeter
  • Optionales KDE plasma applet kann man installieren mit:
  pacman -S plasma-pa

Falls sie beim boot sich nicht connecten können sollte man in der Datei /etc/pulse/client.conf autospawn auf true setzen.

  • Um übers Netzwerk PulseAudio zu steuern kann man sich PaWebControl installieren

Ein (CLI) Mixer für die console kann man installieren via

 pacman -S ponymix

Das System für PulseAudio konfigurieren

Normalerweise startet PulseAudio erst, sobald ein Benutzer es benötigt und nicht als systemweiter Dämon da dies einfacher, effizienter und sicherer ist. Falls du es doch als systemweiter Dämon brauchst, um z. B. mehrere Benutzer gleichzeitig laufen lassen zu können editiere die /etc/rc.conf wie folgt:

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

Um den PulseAudio Device Chooser (padevchooser) zu verwenden, musst du eventuell auch den 'avahi-daemon' zu der Liste hinzufügen. Danach solltest du die Benutzer zu der Pulse Gruppe hinzufügen:

 gpasswd -a benutzer pulse-access

Es ist eine gute Idee dich zu der 'pulse-rt' hinzuzufügen was nicht automatisch gemacht wird. Dies kann zu Performanzverbesserungen führen:

 gpasswd -a <user> pulse-rt

Damit PulseAudio mit dem Befehl startx startet , wird folgender Befehl in ~/.xinitrc benötigt

exec start-pulseaudio-x11


Bei der Fehlermeldung

Daemon startup failed

sollte überprüft werden , ob dbus im DAEMON Array in der /etc/rc.conf vorhanden ist:

DAEMONS=( .... dbus ...)

Konfiguration des Alsa Plugins

Es ist empfohlen ALSA und PulseAudio anzupassen, da die meisten Anwendungen ALSA verwenden. Dies wird wie oben beschrieben durch das PulseAudio plugin möglich. Damit ALSA PulseAudio verwendet muss man die /etc/asound.conf (empfohlen) oder die ~/.asoundrc editieren (Eventuell müssen diese erst erstellt werden):

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

Falls du PulseAudio als Standardgerät verwenden möchtest solltest du entweder die verwendete Hardware in /etc/pulse/system.pa spezifizieren:

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

oder du verwendest HAL zur automatischen Erkennung:

 load-module module-hal-detect

Die Zeile ist normalerweise schon in /etc/pulse/system.pa vorhanden. Versichere dich, dass sie nicht auskommentiert ist. Wenn du PulseAudio nicht als Standard für ALSA gesetzt hast, musst du in jedem Programm als Ausgabegerät 'pulse' einstellen, damit PulseAudio verwendet wird.

Mehr als zwei Lautsprecher ansteuern

Um zum Beispiel bei einem 5.1 Soundsystem nicht nur auf den beiden Front Lautsprechern etwas zu hören, wenn man nur Stereo ausgibt, passt man in der Datei /etc/pulse/daemon.conf die Anzahl der Lautsprecher an:

default-sample-channels = 6

Achtung, hier wird nicht jede Anzahl angenommen, bei 5 zum Beispiel startet Pulseaudio nicht.


Konfiguration SDL für PulseAudio

Seit Version 1.2.12 unterstützt SDL nativen PulseAudio Support. Füge diese Zeile in deine .profile oder .bashrc 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, der Sound hat immer furchtbar gestottert, auch ohne PulseAudio. Ich habe gelesen, dass das an der HDA Intel Soundkarte liegt. 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 export SDL_AUDIODRIVER="pulse" nicht funktioniert oder du eine alte SDL Version benutzt, kannst du die esd Ausgabe benutzen, die auch von PulseAudio übernommen wird:

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?]

GStreamer

Für eine Nutzung mit GStreamer sollte man gst-plugins-good installieren.

Mehr Infos über GStreamer hier: klick mich

Konfiguration von OpenAL für PulseAudio

Spiele, die OpenAL benutzen PulseAudio als Standard. Können aber explizit darauf konfiguriert werden:

   nano /etc/openal/alsoft.conf
   drivers=pulse,alsa

Konfiguration von libao für PulseAudio

pacman -Syu libao-pulse

Füge in /etc/libao.conf ein:

default_driver=pulse


Mehrere PulseAudio ALSA Geräte

PulseAudio kann mehrere verschiedene Soundkarten oder mehrere virtuelle PCMs einer Soundkarte (zum Beispiel, getrennte Front und Surround Ausgabekanäle) verwenden. Dazu muss man PulseAudio für mehrere ALSA sinks konfigurieren. In /etc/pulse/default.pa:

load-module module-alsa-sink device=front
load-module module-alsa-sink device=rear

Wenn der Client verschiedene Pulse/ALSA Ausgabegeräte haben soll, bearbeitet man die /etc/asound.conf oder ~/.asoundrc:

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

Und richtet die entsprechenden ctl Elemente ein:

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

padsp wrapper

Wenn man ein Programm benutzen will, das OSS benutzt, kann man es mit padsp mit PulseAudio starten.

padsp OSSprogram

Beispiele:

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

Man kann außerdem ein benutzerdefiniertes Skript erstellen.

/usr/local/bin/OSSProgram
#!/bin/sh
exec padsp /usr/bin/OSSprogram "$@"

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. Zusätzlich muss der pulse-cookie auf die Clients kopiert werden. Um das TCP Modul zu aktivieren, füge Folgendes in /etc/pulse/default.pa ein (oder entferne das Kommentarzeichen):

load-module  module-native-protocol-tcp

Wenn PulseAudio als systemweiter Daemon läuft, was für Netzwerksound Sinn macht, befindet sich der Cookie in /var/run/pulse/.pulse-cookie. 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).

[Hä?]

Um den Cookie per SSH von dem Server, auf dem der Sound ausgegeben werden soll, auf die Clients nach /etc/pulse-cookie zu kopieren (auf den Clients muss ein SSH Server laufen und man muss root-Rechte haben):

scp /var/run/pulse/.pulse-cookie client:/etc/pulse-cookie

Auf den Clients müssen dann die Rechte richtig gesetzt werden. Als root:

chown pulse:pulse-access /etc/pulse-cookie
chmod 640 /etc/pulse-cookie

Immer noch auf dem Client: Der Pulse Client muss wissen, wo er nach dem Cookie suchen muss. In /etc/pulse/client.conf wird deshalb eingetragen:

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

Dann muss der Client konfiguriert werden, um auf den entsprechenden Server zugreifen zu können. Wieder in der /etc/pulse/client.conf:

## The default server to connect to
default-server = <die IP Adresse des Servers>

Fertig.

Problembehebung

module-x11-publish

Wenn Folgendes in den PulseAudio Logs auftaucht:

x11wrap.c: XOpenDisplay() failed
module.c: Failed to load  module "module-x11-publish" (argument: ""): initialization failed.
main.c: Module load failed.
main.c: failed to initialize daemon.

Dann muss man das module-x11-publish in /etc/pulse/default.pa deaktivieren (auskommentieren):

#load-module module-x11-publish

"daemon startup failed"

Wenn PulseAudio nicht als Daemon startet und Folgendes ausgibt:

E: main.c: daemon startup failed.

Muss man vielleicht die Zeile in /etc/pulse/default.pa deaktivieren, in der .fail steht.

Kommentiere diese Zeile einfach aus, indem du ein # davor schreibst.

[Was soll das denn sein?]

Eine Lösung wäre, "dbus" in den Daemons Array von etc/rc.conf zu setzen.

module-hal-detect

Wenn eine Fehlermeldung wegen HAL, module-hal oder Ähnliches ausgegeben wird, wirst du module-hal-detect aus /etc/pulse/default.pa entfernen müssen und explizit die ALSA Hardware angeben, zum Beispiel:

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


GNOME älter als 2.18

GNOME Versionen die älter sind als 2.18 unterstützen ESD und starten dies bei einem Sitzungsbeginn. Da man PulseAudio als Ersatz von ESD verwenden kann, gibt es eine Möglichkeit GNOME auszutricksen und anstatt von ESD PulseAudio beim Sitzungsbeinn zu laden. Um das zu erreichen musst du das esdcompat Skript einsetzten welches standardmäßig bei PulseAudio dabei ist.

Erstelle einen Systemlink von /usr/bin/esd der auf das Skript verweist:

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

Das war es schon. Nun sollte GNOME bei jeder Sitzung PulseAudio starten und verwenden. PulseAudio verwendet standardmäßig jedes Mal einen anderen 'Anschluss' (/tmp/.esd-xxxx) im Gegensatz zu ESD um zu verhindern, dass mehrere Benutzer den gleichen Anschluss verwenden. Um zu verhindern das es nun Probleme gibt da sehr viele GNOME Anwendungen den Standardanschluss ansprechen wollen solltest du die Datei /etc/pulse/system.pa editieren. Such nach der Linie "load-module module-esound-protocol-unix" und editiere diese wie folgt:

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

Da funktioniert nur solange du der einzigste Benutzer an diesem System bist. Sobald ein zweiter hinzukommt wird es wohl zu Problemen kommen.


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