Einige Leute benutzen den Music Player Demon um Musik abzuspielen. Was ist nun aber, wenn man beispielsweise im Wohnzimmer Musik über MPD hört, und dann in sein Zimmer geht und dort die gleiche Musik weiterhören will?
Ich hab auf die Schnelle keine brauchbare Lösung gefunden, darum hab ich selber was gebastelt. Ein kleines Skript was sich darum kümmert, zwei Instanzen von MPD zu synchronisieren.
Vorrausstzung ist, dass beide MPDs auf die gleiche Musikdatenbank Zugriff haben.
Ich bin kein großer Held was Shellskripte angeht, bastel nur ein Bisschen rum. Wenn ich was falsch bzw. grob ekelhaft gemacht hab, bitte ich den Leser darum, mich drauf hinzuweisen, damit ich es in Zukunft besser weiß!
#!/bin/bash
master_host=password@remote_host
slave_host=password@localhost
# Falls einer der MPDs auf einem anderen Port laeuft,
# muss natuerlich zu jedem MPD_HOST auch der richtige MPD_PORT gesetzt werden
export MPD_PORT=6600
export MPD_HOST=$master_host
firstloop=true
for((;;)); do
echo -n .
song=`mpc --format %file% | head -n 1`
export MPD_HOST=$slave_host
if [ "$(mpc --format %file% | head -n 1)" != "$song" ]; then
echo songs do not match
mpc clear
mpc add "$song"
mpc play 1
export MPD_HOST=$master_host
songlength=`mpc --format %time% | head -n 1`
# Berechnen wie lange wir warten sollen - Songlaenge - 5 Sekunden
waittime=$(echo $(echo $songlength | cut -d : -f 1) * 60 + $(echo songlegth | cut -d : -f 2) - 5 | bc)
if [ "$firstloop" != "true" ]; then
echo sleeping
sleep $waittime
else
firstloop=false
fi
else
export MPD_HOST=$master_host
fi
done
Das Ganze ist nicht sehr genau. Der Versatz zwischen den beiden MPDs liegt bei etwa einer halben Sekunde, aber das ist schonmal ganz okay. Ich plane diese Lösung irgendwann noch etwas effizienter zu implementieren. Ich habe hier mpc benutzt, das baut immer eine Verbindung auf, schickt die Anfrage und schließt die Verbindung wieder. Wenn man die Verbindung einfach offen lässt, erhält man sicher weniger Verzögerung.
Edit: Dieser Post wurde beim Konvertieren nach WordPress verstümmelt, vermutlich kam der Importer mit dem Code-Block nicht klar. Jetzt ist wieder alles da. Vielen Dank an Tilo für den Hinweis!