One of the hard things about getting started with mpd
is that there seems
to be little documentation about the details of how other people use it.
Instead you're given a collection of great tools and an excellently
designed system, and expected to build your own personal music playing
setup out of them with little direction. So I thought I'd document mine.
There are several computers around the house that run mpd. One in my
office, one has speakers in the bedroom. My laptop, of course. And I put a
nslu2 in the living room in a fun lego case that embeds the little computer
into a remote controlled speaker (photos when I find a camera). All of
these machines have their music libraries synchronised using unison
.
I use sonata
as a graphical frontend and browser. I keep one instance of
sonata running on my desktop in the office, so I can go there to change
music if my laptop's not on. Also so guests can change the music.
(Update: ncmpc is also looking like a client I'll use frequently. The keystrokes were hard to learn, but once it's set up and learned, like many console clients, the work pays off in power and speed.)
I like to listen to whole albums at a time, and sonata doesn't make this
especially easy in its user interface. I eventually realised that the best
way to do it, for me, was to create a separate playlist for each album.
Sonata does make it really easy to click on a playlist and start playing
it. I wrote mpgenplaylists
to automatically generate those playlists for
me.
I wrote a set of commands that I can use to transfer state between my mpd
daemons. The easiest to use and most useful of these is mpswap
, which
swaps the state of two daemons. Generally I only have one mpd playing at a
time, and the others are paused, though it'll also swap the states of two
running mpds. So if I run "mpswap dodo dragon", the music that had been
playing in my bedroom starts coming out the speakers in the office. Same
song, not a single missed note. That's pretty handy. Or I can run "mpswap
dodo" to swap state with my laptop, and carry the music out of the
house with me. (This would be more seamless if I carried some bluetooth
wundergadget so my computers knew where I am, but I think I'll pass.)
Another tool I wrote is mpstore
, which dumps the mpd daemon state out to
stdout, so it can be saved to a file and later loaded with mpload
. I
use this when I'm listening to audiobooks, to store my place. Another one
is mpfade
, that can wake me up by slowly fading in music. Or slowly
fade out and stop. Writing these little hacks is addictive, but I won't
bore you with the rest.
On some of the servers I run mpd-dynamic
, a daemon that watches the
playlist and makes sure it always has 10 unplayed items in it, chosing new
items at random. It also removes old played items from the playlist.
This is nice if I want music going without the bother of picking what.
I typically add some albums to the playlist, and then when they're done, it
keeps playing random stuff until I manually add something else. I do want
to find something that can more intelligently pick things to play. I
tried lastfmpdqc
, but didn't like its results.
Switching to mpd has meant that the filenames of mp3s matter again, since
mpd UIs expose the filenames (a pity). I used exfalso
to clean up all my
file names based on the music's tags. I also added ReplayGain information
to all my music so mpd can use it to normalise volume.
BTW, after all this, I'll probably still only listen to music for an average of 3 hours per week.
mpd-dynamic
is in the Audio::MPD perl module.
mpdswap
, mpdstore
, mpfade
, mpgenplaylists
, and more are in
mpdtoys.