mpd -music player daemon

mit dem mpd kann man beliebige sound dateien (die liste der unterstützten formate ist lang...) verwalten und abspielen. da der mpd auch das streaming beherrscht, kann quasi jeder client die musik empfangen.
und das tolle: alles ist kostenlos (die hardware natürlich ausgenommen)
falls nicht anders vermerkt, setze ich bei den mpd's immer einen raspberry pi b+ ein.
oft ist zu lesen, dass den klinkenausgang eher bescheiden ist - naja: viel kann man wirklich nicht erwarten. aber für unsere ohren war es immer ausreichend.

schnellstart

  • basis: alles was man so zum start benötigt
  • mympdbox: mein mpd mit selbstgebautem case, display unb buttons

was braucht man ?

hardware

  • einen raspberry pi (typ b sollte es schon sein)
  • stromversorgung (usb kabel und eine stromquelle)
  • sd karte - 4gb reichen - ich hab immer 8er genommen. die kosten nicht viel mehr und man ist auf der sicheren seite, falls pi mal für andere dinge benutzt werden soll
  • lautsprecher samt kabel, wenn nicht nur gestreamt werden soll
  • netzwerk anschluss (entweder wlan usb dongle oder ethernet kabel).
für die erstinstallation ist ein hdmi monitor und eine usb tastatur sinnvoll. später kann man die weitere installation remote per ssh machen.

software

ein aktuelles raspbian image solltes es schon sein.
die weiteren utilities (mpd, mpc, alsa,...) kann man einfach installieren.
welche es sind und wie man das macht liste ich in software installieren auf.

sonstiges

natürlich seine musikbibliothek.
man kann die musikdateien speichern:
  • auf der sd karte (dann sollte man natürlich eine größere verwenden)
  • auf einem usb stick oder einer usb festplatte, die natürlich am pi angeschlossen und evt. mit einer externen stromquelle betrieben werden muss. der pi gibt ja via usb nicht allzuviel her
  • oder aber - mein weg - auf einem netzlaufwerk (nas)

bereit ? dann gehts los !


raspberry vorbereiten

die grundinstallation eines raspberry pis kann man in vielen beiträgen im netz finden. daher gehe ich hier nicht auf die details ein, sondern nenne nur die wichtigsten punkte

  • sd karte mit dem heruntergeladenen raspbian image bestücken. ich habe bisher immer den windows beschritten (also mit hilfe des win32 disk imagers)
  • karte reinstecken
  • strom an
  • raspi-config sollte automatisch gestartet werden. hier die nötigen einstellungen vornehmen
  • nach finish unbedingt rebooten



danach kann man sich mit pi und raspberry (oder dem in der raspi-config gewähltem root passwort) anmelden

software installation

zunächst sollte ein update des raspbian vorgenommen werden
$ sudo apt-get update
$ sudo apt-get dist-upgrade

wlan nötig ?

falls du wlan nutzen möchtest, solltest du das jetzt noch schnell konfigurieren. da auch das im netz ausführlich beschrieben ist, hier nur die kurzform:
$ sudo nano /etc/network/interfaces
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid "DEIN-WLAN-NAME"
wpa-psk "DEIN-WLAN-SCHLÜSSEL"
$sudo service networking restart

benötigte pakete installieren

du brauchst nicht nur den mpd, sondern zur soundausgabe auch die alsa-utils. außerdem empfehle ich den mpc gleich mit zu installieren. das ist ein mpd client, mit dem du gleich auf deinem raspi den mpd steuern kannst (ohne einen weiteren client)
$ sudo apt-get install mpd mpc alsa-utils

jetzt noch die soundeinstellungen vornehmen
$ sudo modprobe snd_bcm2835
$ sudo amixer cset numid=3 1
die 1 steht für die ausgabe auf den klinken ausgang (0 ist auto und 2 ist hdmi)

mpd konfigurieren

sudo nano /etc/mpd.conf
wenn der mpd übers netzwerk betrieben werden soll, muss die bind_to_address angepasst werden. wenn du dir nicht sicher bist was du eintragen sollst, kommentier die zeile einfach aus
#bind_to_address

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"        # optional
#       format          "44100:16:2"    # optional
#       mixer_device    "default"       # optional
#       mixer_control   "PCM"           # optional
#       mixer_index     "0"             # optional
}

musik ins netzwerk streamen

wenn du die musik nicht nur auf die klinke ausgeben willst, kannst du auch andere outputs aktivieren.
die schönste ist meiner ansicht nach das streaming ins eigene netzwerk. damit kann jeder streamingfähige client die musik ausgeben
audio_output {
	type		"httpd"
	name		"MPD HTTP Stream"
	encoder		"vorbis"		# optional, vorbis oder lame
	port		"8000"
	quality		"5.0"			# entweder
#	bitrate		"128"			# oder
	format		"44100:16:1"
}
hier muss man mal etwas mit dem encoder und den bitraten rumspielen. diese art der ausgabe belastet den kleinen pi etwas. evt. muss du dann auch über eine übertaktung oder an einen pi version 2 nachdenken

musikverzeichnisse anpassen

das wohl wichtigste kommt jetzt: wo liegen deine musikdateien
music_directory         "/var/lib/mpd/music"
playlist_directory      "/var/lib/mpd/playlists"
hier musst du die verzeichnisse anpassen, dass deine musik auch gefunden wird. meine nas einstellungen kommen gleich.
Am ende muss der mpd noch durchgestartet und die datenbank aufgebaut werden
sudo /etc/init.d/mpd restart
sudo mpc update

musikdateien auf dem netzlaufwerk



usb soundkarte

ich schrieb ja schon, dass die ausgabe via klinke für mich ok ist. ich habe dann aber doch mal eine billig usb karte angeschlossen und siehe da: die (leichten) störgeräusche waren zwar nicht weg - aber weniger. es ist eine karte mit c-media audio chipset. die wird vom raspbian out-of-the-box unterstützt. alles, was ich machen musste, war die hardware device id zu ermitteln
aplay -l
den ermittelten wert in der mpd.conf eintragen
audio_output {
       type            "alsa"
       name            "USB Soundkarte"
       device          "hw:1,1" # optional
       format          "44100:16:2" #optional
}
und den mpd restarten
sudo /etc/init.d/mpd restart
dann hab ich noch mit dem alsamixer den output erhöht - cool.

soundkarte
Next

mpd clients

clients für den mpd gibt es für alle plattformen. eine internetsuche mit einer suchmaschine deiner wahl sollte hier ergiebig sein.
daher will ich hier nur meine kurz nennen
als mobile devices haben wir ausschliesslich produkte mit einem angebissenem apfel. und für diese sind MPoD bzw MPad klasse und absolut ausreichend.
für die rechner mit den fenstern haben wir auremo im einsatz
und für die pinguine den gnome music player client

Next

album cover server

wenn nicht nur die namen den albums, sondern auch das passende cover dazu angezeigt werden soll...
...müssen entweder:
  • die grafik informationen im mp3 file liegen, oder
  • die files dem client irgendwie zur verfügung gestellt werden
die von uns eingesetzten mobilen clients können beides - ich habe trotzdem auf einem bananapi (ja, du hast richtig gelesen...) einen webserver installiert der die bilder bereitstellt.

man könnte auch auf jedem mpd einen webserver server installieren - aber wozu ?

Next

meine mpd box

wie bereits schon erwähnt bastel ich gerne mal. und eine größeres projekt ist dieses:
ein mpd mit eigenem case und wunschausstattung

ziele

  • ein eigenes case aus holz bauen
  • buttons zum basissteuerung des mpd vom case aus. somit wird kein externer client mehr nötig
  • kleines display, um daten anzuzeigen (z.b. welcher titel gerade läuft)
  • buttons zum herunterfahren des pi

installation

falls noch nicht geschehen, müssen jetzt die pakete für den zugriff auf git repositories installiert werden
sudo apt-get install git-core

zum ansteuern des 2x16 lcd schirm benutze ich die bibliotheken von adafruit. dieses müssen zunächst installiert werden:
git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
dann hab ich aus dem paket die datei Adafruit_CharLCD.py in mein python projektverzeichnis kopiert und in der __init__ funktion meine benutzten pins angepasst:
def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18], GPIO=None):

da ich ja auch eine kleines radio mit einbauen will, brauche ich dafür wiringPi komponenten.
git clone git://git.drogon.net/wiringPi
cd WiringPi
./build 
und die i2c-tools
sudo apt-get install i2c-tools

i2c für mein radio modul aktivieren

normalerweise sollte es ausreichen, über sudo raspi-config den i2c support zu aktivieren. man kann es aber per hand machen. ist vor allen sinnvoll, wenn man - so wie ich - problemen hinterherläuft (hat bei mir auf anhieb nicht funktioniert. mein radio wurde nicht erkannt. lag aber an der falschen verkabelung. ich hatte SCL und SDA vertauscht)
in der /etc/modprobe.d/raspi-blacklist.conf die spi und i2c zeilen mit einem kommentar versehen (oder rauslöschen)
sudo nano /etc/modprobe.d/raspi-blacklist.conf
so sollte das dann aussehen
# blacklist spi and i2c by default (many users don't need them)
# blacklist spi-bcm2708
# blacklist i2c-bcm2708
dann muss am ende der boot.txt noch folgendes eingetragen werden:
sudo nano /boot/config.txt
dtparam=i2c1=on
dtparam=i2c_arm=on
damit das modul bei jedem start gleich mitgeladen wird, ist das auch noch einzutragen:
sudo nano /etc/modules
i2c-dev
jetzt noch den pi user in die i2c gruppe aufnehmen (damit der das auch nutzen darf)
sudo adduser pi i2c
dann rebooten...
wenn dann das radio modul richtig angeschlossen ist, kann man hoffentlich nach aufruf von i2cdetect -y 1 eine 10 und eine 11 sehen:
       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
  00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
  10: 10 11 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
  20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
  30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
  40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
  50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
  60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
  70: -- -- -- -- -- -- -- --  
so. fast fertig. jetzt noch das kleine c radio programm kompilieren mit
gcc -o radio radio.c -lwiringPi
und dann testen:
gpio load i2c
./radio 98.7
für die ausgabe der prozessorauslastung bediene ich mich der psutil programme
sudo apt-get install python-pip python-dev
sudo pip install psutil

Next

python

zugegeben: als java entwickler war python nun nicht meine wunschsprache, aber viele beispiele basieren da drauf und sie ist auf jedem pi mit dabei
also hab ich ihr eine chance gegeben - und wurde nicht enttäuscht
hier mein aktueller stand des skripts zum reagieren auf actions: action.py

Next

bilder