Remotely updating iTunes and MPD at the same time
Published: June 05, 2015
Like many other people, I enjoy listening to music. I have aggregated a reasonably large (~90 GB) library of digital music over the years, and, of course, my favorite way to listen to it is MPD.
Right now, I'm running MPD on my "media center" computer hellboy2
, which
(surprisingly?) is a MacBook running OSX Yosemite connected to an HDTV. Before
I switched to MPD again (this is actually my second switch to MPD; I used it
around 8 years ago on my first Linux systems), I used iTunes to manage my music
library. One advantage of iTunes (and the main reason why I cannot stop using
it) is that iTunes on a Mac is probably the most dependable way of syncing
music to an iPod. This is the sole reason why I still want all of my music to
be indexed by iTunes.
Up until recently, if I wanted to import music into my library, I would
drag-and-drop the files into iTunes to make sure they end up in the right
place. After that, I would run a quick mpc update
to update my MPD library
(which, of course, points to my "iTunes Media" folder).
This was a rather dirty approach to adding music to my library, and I cannot
recommend it to anyone (Especially since it involves using GUI
programs…). Fortunately, I stumbled upon this interesting post on
StackExchange today. The user patrix
explains that there exists a "magic"
directory for iTunes that automatically imports its contents to the iTunes
library. This is perfect! Using this "magic" folder, I can add add files to my
iTunes by simply moving them into the folder ~/Music/iTunes/iTunes\
Media/Automatically\ Add\ to\ iTunes
!
Naturally, I had to write a script that automates the process of adding music
to my library. I usually write scripts in bash
, but since this is really just
a small wrapper around scp
, I figured that I could whip up a fish-shell
function instead. This is it:
function add-music --description 'Copy music files to a remote Mac, add them to iTunes, update mpd DB' # the remote computer set -l REMOTEHOST "hellboy2" set -l REMOTEUSER "trx" set -l REMOTEDIR "/Volumes/Data/Users/trx/Music/iTunes/iTunes\ Media/Automatically\ Add\ to\ iTunes" set -l REMOTE "$REMOTEUSER@$REMOTEHOST" # only do this if we have files to send if test (count $argv) = "0" echo "No files specified. Aborting." return -1 end # now, test whether we can even speak to the remote if not ping $REMOTEHOST -c 1 -W 1 >/dev/null ^/dev/null echo "Can't reach remote host $REMOTEHOST. Aborting." return -1 end # check whether SSH login works if not ssh $REMOTE "true" >/dev/null ^/dev/null echo "Can't establish SSH connection to remote host $REMOTEHOST (ip: "(dig +short $REMOTEHOST)"). Aborting" return -1 end # now check whether iTunes is running on the remote if not ssh "$REMOTE" "ps aux | grep -q iTunes" echo "iTunes is not running on $REMOTE, you have to start iTunes first!" return -1 end # if we reach this point, we're ready to send the files echo "Transferring music to $REMOTE..." scp $argv "$REMOTE":"$REMOTEDIR" echo "Updating music database..." ssh "$REMOTE" "mpc update" end
This function can be used from any computer on the same network as the media
center computer. So, for example, I can now take some MP3s on my main machine,
ava
, edit the ID3 tags to my liking using puddletag, and then place them in
my library on hellboy2
using the above script. In the script, I am first
making sure that scp
can be used, then I copy all of the music files to the
"magic" iTunes directory, and then I update the MPD library.
Quite elementary, but still cool. I did not expect iTunes to have a feature like this.
Hope everyone is enjoying the great music this summer,
Dennis