MPD OSD

Mike Massonnet | Posted 3 weeks, 2 days ago on April 26, 2006

I wrote me a script to display an OSD of the current played track by MPD. Next I also wrote a script to display an OSD (using the first script) when the track changes.

Each script uses mpc. I set a key binding on a useless multimedia touch to the first script. The second script should be run in background.

mpd-osd.sh

#!/bin/sh
# Display an OSD of the current track

track ()
{
  title=`mpc | head -1 | sed 's/^volume: [0-9]*%.*/(nothing)/'`
  position=`mpc | head -2 | tail -1 | sed 's/.*\(([0-9]*%)\)/\1/'`
  [[ "$title" == "(nothing)" ]] && echo "$title" || echo "$title $position"
}

pid=`ps ax | grep osd_cat | sed '/grep/d' | awk '{print $1}'`
[ "$pid" ] && kill $pid
echo -e "Playing:\n"`track`" " | \
 osd_cat -f '-bitstream-bitstream charter-bold-r-*-*-*-250-*-*-*-*-*-*' \
 -p bottom -o 10 -l 3 -A right -c '#89B83F' -s 2 -d 4

mpd-new-track.sh

#!/bin/sh
# Display an OSD when the track is changed

function setNewOSD ()
{
  tmp=/tmp/mpd-new-track.sh
  currentTrack=`mpc | head -1`
  lastTrack=`cat $tmp`
  echo "$currentTrack" > $tmp
  [ "$currentTrack" != "$lastTrack" ] && mpd-osd.sh&
}

while sleep 1
  do
  setNewOSD
done

Earlier posts