Netzwerk-Sound-Server mit pulseaudio & mpd

Feb 18, 2012. | By: Paul

Bei meinem Desktop habe ich aktuell das Problem, dass die analoge Audioausgabe von einem lautem Masserauschen begleitet wird, sobald ich meinen alten Vollverstärker daran anschließe. Das ist mir etwas unheimlich, aber auch ein gründliche Inspektion von Gehäuse und Netzteil brachte nichts ungewöhnliches zu Tage. Als einfachste Lösung erschien mir eine externe USB-Soundkarte anzuschaffen. Die Wahl fiel nach auf eine Behringer Ucontrol UCA202; vor allem wegen des guten Preis-/Leistungsverhältnisses, der geringen Größe und guter Linuxkompatibilität. Damit ich aber nicht immer meinen Rechner zu Musikhören bemühen muss, habe ich die Karte kurzentschlossen an meinem kleinen Homeserver angeschlossen (eine Seagate Dockstar mit Debian Squeeze), mit dem Ziel, dort den Musikserver mpd zu betreiben, den ich z.B. bequem mit meinem Smartphone steuern kann.

alsa installieren

Also die Karte anschließen und alsa installieren:
apt-get install alsa-base alsa-utils
Anschleißend muss man alsa erlauben, die USB-Karte als Default zu verwenden, was es standardmäßig zugunsten eingebauten Audiohardware (in meinem Fall nicht existent) verweigert. Also in /etc/modprobe.d/alsa-base.conf die Zeile
options snd-usb-audio index=-2
ändern in
options snd-usb-audio index=0 nrpacks=1
wobei vor allem das index=0 wichtig ist. Der nrpacks Parameter soll angeblich die Latenz senken, was ich aber nicht beurteilen kann. Wieder erwarten blieben die angeschlossenen Boxen aber vorerst stumm. Nach längerem hin und her, in dem mir vor allem die .asoundrc großes Vergnügen bereitet hat..., brachte vermutlich ein Kernelupdate auf den aktuelleren weniger veralteten Squeeze-Backports-Kernel 2.6.39-bpo.2-kirkwood Abhilfe. Damit läuft jetzt aber alles wunderbar (und mit alsa Standarteinstellungen).

mpd installeren

Die Installation von mpd lief dafür absolut problemlos:
apt-get install mpd
Anschließend sollte man sicherstellen, das der Benutzer mpd die Musiksammlung zumindest lesen kann, etwas durch ein
chmod -R 775 ~/Music
Dann in der Datei /etc/mpd.conf den Pfad zur Musiksammlung anpassen und den Netzwerkzugriff erlauben, indem man die Zeile
bind_to_address               "localhost"
durch ein vorgestelltes "#" auskommentiert. Eine ausführliche Anleitung gibt es im Ubuntuusers-Wiki. Nun kann man mit diversen Clientapplikationen -- ich nutzte Sonata unter Ubuntu und MPDroid unter Android -- die Musikwiedergabe steuern.

Netzwerkstreaming

Soweit konnte mich das ganze Setup durchaus begeistern. Allerdings hatte ich auf meinem Desktop weiterhin keine funktionierende Audioausgabe. Die nächstliegendste Idee war, die Audioausgabe über LAN zum Server zu streamen. Dazu bietet es sich an, noch einen Pulseaudio-Server auf den alsa-Server zu setzen, da dieser derartiges Streaming out-of-the-box (und -- um etwas vorauszugreifen -- auch durchaus überzeugend) beherrscht.

Server (Debian Squeeze)

Also pulseaudio auf dem Server installieren:
apt-get install pulseaudio
und in den system Modus schalten. Dazu in der Datei /etc/default/pulseaudio
PULSEAUDIO_SYSTEM_START=0
von 0 auf 1 ändern. Achtung: Der system Modus birgt wohl ein gewisses Sicherheitsrisiko, man sollte auf jeden Fall darauf achten, dass in der selben Datei auch
DISALLOW_MODULE_LOADING=1
gesetzt ist. Nun nutzt pulseaudio die Einstellungen aus /etc/pulse/system.pa, und man kann durch ein Einfügen der Zeile
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
den Empfang von Netzwerkstreams auf Port 4713 aktivieren (natürlich evtl die letzte Maske auf das eigene Subnet anpassen). Anschließend den pulse-Sever starten
/etc/init.d/pulseaudio start
und testen. Es bieten sich an, nun auch mpd auf Pulseaudio umzustellen. Dazu in /etc/mpd.conf den Paragraphen über alsa auskommentieren und den über pulseaudio aktivieren.

Client (Ubuntu Oneiric)

Auch hier sollte der pulseaudio installiert und funktionsfähig sein (bei Ubuntu seit 8.04 Standard). Nun kann man durch setzen der Zeile
default-server = tcp:SERVERIP:4713
in der Datei  /etc/pulse/client.conf die KOMPLETTE Audioausgabe auf den Server umleiten, was bei mir allerdings erst nach einem Neustart funktionierte.

Fazit

Zugegebener Weise habe ich das ganz Setup noch nicht sehr lange in Betrieb, aber bisher funktioniert alles problemlos. Insbesondere hatte ich bei den Audio-over-Lan große bedenken bezüglich der Latenz der Signale, aber das scheint gänzlich unbegründet gewesen zu sein. Selbst Filme lassen sich ohne erkennbare Verzögerung der Tonspur und Abzüge in der Soundqualität anschauen. In ein paar Wochen kann ich dann vermutlich noch ein paar Erfahrungswerte hinzufügen.

Android Bloatware compiler benchmark scrm ETL Spark

About

I'm a ML Engineer in Munich, Germany.

Social Links