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!