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!