This script uses the KDE DCOP and Amarok to find the path of the currently playing media file. It makes a symbolic link to this file in a chosen location — in my case, on a web server. Then anyone can hear what I’m currently listening to. To reduce bandwith consumption, it also converts FLAC files to OGG files.
You can download the nowplaying script
. It requires Zsh to run, but it would not be difficult to convert it to Bash etc.
#!/bin/zsh
#
# Matthew Blissett, 2007-08-11
#
# Script/daemon to update a symlink to point to the currently playing file
# in Amarok
#
# Improvements needed:
# – What if Amarok isn’t running?
# – Or isn’t playing anything?
# – Or I press “next track” etc?
#
dir="/home/matt/music/.nowplaying"
recodedir="$dir/recode"
umask 0072
while :; do
echo -n $(date)
now=$(dcop amarok player path)
if [[ "$now:e" == "flac" ]]; then
echo -n "; FLAC"
# Check if we have a recoding of the file already
if [[ -e "$recodedir/$now:t:r.ogg" ]]; then
echo -n "; already converted to OGG"
else
echo -n "; converting to OGG..."
mkdir -p $recodedir
nice -n 8 oggenc --quiet --quality 3 --output "$recodedir/$now:t:r.ogg" "$now"
echo -n " done"
fi
target="$recodedir/$now:t:r.ogg"
else
if [[ "$now:e" == "mp3" ]]; then
echo -n "; MP3"
target="$now"
else
if [[ "$now:e" == "ogg" ]]; then
echo -n "; OGG"
target="$now"
fi
fi
fi
echo "; $target:t"
rm -f $dir/now.*
ln -sf "$target" $dir/now.$target:e
echo "$target:t" >! $dir/filename
totalTime=$(dcop amarok player totalTime)
currentTime=$(dcop amarok player currentTime)
if [[ "$currentTime" != "" ]]; then
totalSecs=$(( ${totalTime##[0-9]*:} + $(( ${totalTime%%:[0-9]*} * 60 )) ))
currentSecs=$(( ${currentTime##[0-9]*:} + $(( ${currentTime%%:[0-9]*} * 60 )) ))
remain=$(( $totalSecs - $currentSecs ))
echo "${remain}s remaining."
sleep $(( $remain + 12 ))
else
echo "Waiting 60s"
sleep 60
fi
done