Oskar Welzl: Weblog zur Homepage

A2DP mit PulseAudio auf Gentoo

Vor ca. zwei Jahren habe ich hier eine Anleitung zur Steuerung von Bluetooth-Headsets unter GNU/Linux veröffentlicht. Die ist mittlerweile nur völlig veraltet - jedenfalls funktionierts bei mir so schon lange nicht mehr. Irgendwie hat mich das gewundert: Sowohl mein N900 als auch der Ubuntu-Laptop „tun“ brav mit meinem Bluetooth-Kopfhörer (sogar mit dem A2DP-Profil, also in wirklich guter Tonqualität). Warum also kanns der große Desktop-Rechner nicht?

Heut hatte ich ein bißchen Zeit zum Überlegen und hab die Lösung gefunden: Sowohl das N900 als auch Ubuntu verwenden PulseAudio als Soundserver. Ich hab mich da unter Gentoo noch nicht drübergetraut. Pulseaudio ist neu und man kennt ja die Sprüche von wegen „never change a running system“ und so … Naja. Heut laß ich mal Sprüche Sprüche sein und change mein system:

Pulseaudio ghört natürlich mal installiert und das „pulseaudio“ USE-Flag systemweit gesetzt. (Letzteres kann das Neukompilieren einiger Programme notwendig machen.) Außerdem braucht man in der Regel (und diesen Hinweis hab ich nirgendwo gefunden) das Paket alsa-plugins. Danach kann man schon mal mit dem Befehl
eselect esd list
die Optionen für den Sound-Daemon anzeigen lassen.

(Wahrscheinlich lautet die Ausgabe

Available ESounD implementations:
  [1]   ESounD original *
  [2]   PulseAudio

In diesem Fall schaltet
eselect esd set 2
um auf PulseAudio.)

Nutzen tut das aber noch nicht viel - zumindest bei mir nicht. Ich mußte den vielen nicht-pulseaudiofähigen Applikationen noch eine virtuelle ALSA-Soundkarte einrichten, die dann aufs PulseAudio-System zeigt. (Das ist der Grund, warum alsa-plugins installiert werden muß: Dort befindet sich dieser ALSA-Treiber.)

Um diese „Pulse-Soundkarte“ unter ALSA einzurichten und als Standard zu aktivieren, hält man sich am besten an diese Anleitung aus dem PulseAudio-Wiki. Ich habe eine Datei ~/.asoundrc entsprechend dieser Anleitung so angelegt:

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

Damit ist die angebliche Soundkarte „pulse“ das Standardgerät für alle Programme, die eine ALSA-Umgebung erwarten. Blöd nur, daß auch PulseAudio zur Steuerung der lokal vorhandenen Hardware auf ALSA zugreift und sich damit selbst als Standardgerät anspricht, ohne jemals meine wirkliche Soundcard zu finden. Eigentlich sollte (laut allen Anleitungen) HAL dieses Problem selbständig lösen - tut es aber bei mir nicht. Daher hab ich in der Datei /etc/pulse/default.pa die Abschnitte zur automatischen Konfiguration auskommentiert und die manuelle Konfiguration mit der ausdrücklichen Angabe der Hardware aktiviert.

Folgende Abschnitte sind also raus aus meiner /etc/pulse/default.pa:

.ifexists module-udev-detect.so
load-module module-udev-detect
.else

(… und das nachfolgende „.endif“)

Dafür hab ich folgende Zeilen hinzugefügt (bzw. aktiviert - sie waren nur auskommentiert):

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

Ob die Werte hinter device=hw: mit „0,0“ wirklich richtig angegeben sind, verrät der Befehl
aplay -l
Er listet die vorhandenen Karten- und Gerätenummern auf; in der Regel wird auf einem einfachen Desktop-System „0,0“ schon der passende Wert sein.

PulseAudio greift auf die BlueZ-Bibliotheken zu und kommuniziert so mit einem verbundenen Bluetooth-Gerät. Funktioniert prächtig. Darüber hinaus ist es ein leistungsfähiger Soundserver (dazu wurde es ja eigentlich entwickelt), der es mir ermöglicht, jedem laufenden Programm sein Ausgabegerät und seine individuelle Lautstärke zuzuweisen. Also beispielsweise: Der Porno im Browser wird über die Bluetooth-Kopfhörer gespielt, während der Media-Player den Raum mit leise Hintergrundmusik durch die externen Boxen beschallt. Alles ist möglich. ;)

 
Weitere Links zu …
ALSA:
development