John Harding - Insert Catchy Title Here

Insert witty phrase/saying here.

Sunday, August 19, 2012

Digital Music Workflow

I wanted to work through some problems in my music workflow so I figured I'd write up an extended version of a short previous post that had a few notes.  Hopefully this is useful to someone.


My primary goal is to be able to easily access all my music on a variety of different devices - iPhones, Sonos, cloud-based music services, etc.  Second to this is preserving quality as much as possible.  


My digital music comes from a few different sources:


The bulk of my music comes from CD rips - it's the most practical & consistent way to get high-quality source material.  I rip CDs using Exact Audio Copy (EAC) and encode to FLAC - this way, I can get this music into any format I want (mp3, aac, wma) without worrying about loss of quality.  All the CDs end up in a FLAC folder organized as
CD Rips\AlbumArtist\AlbumName\## TrackName.flac
The folder organization is just for convenience - the embedded metadata is what everything keys off of.  There are a few tricky cases with this method of organization:

Various Artists

Compilations get handled one of two ways.  If there is no obvious artist for the album as a whole (e.g. movie soundtracks, Christmas music collections), it goes under "Various Artists" with the FLAC "album artist" field also set to "Various Artists."  When there is an artist for the album (e.g. DJ Mix CDs), it goes under that artist.  In either case, the "artist" field for individual tracks gets set to the artist for that track.

Multi-Disc Albums

Multi-Disc albums get treated as a single album - so all discs go into the same folder and have the same album name (rather than use album names like "The Wall (Disc One)" and "The Wall (Disc Two)."  When doing this, you need to make sure the "discnumber" and "totaldiscs" metadata fields get set accurately.

iTunes Store

Some of our music is purchased from iTunes.  I used to avoid purchasing anything from iTunes when music was encrypted, as it meant it could only be played on Apple devices.  Now that everything is unencrypted, we buy music from iTunes a bit more often - mostly singles.  On disk, I leave this the way iTunes organizes it:
iTunes Media\Music\TrackArtist\AlbumName\## TrackName.m4a
It's a bit annoying that iTunes uses the track artist instead of album artist on the filesystem, but since everything uses the metadata, it doesn't cause problems in practice.

Amazon Music Store

We also have some music from the Amazon music store - mostly singles from before iTunes got rid of DRM.  I manually put this stuff into the same structure as I use for CD rips, since I seem to get a wide range of file naming conventions from Amazon downloads:
Amazon Music\AlbumArtist\AlbumName\## TrackName.mp3
Since I buy so little from Amazon, I haven't bothered to automate any of this.


I've got a few odds and ends from other sources, which go in the same structure as CD rips and Amazon, but with a different root:
Other\AlbumArtist\AlbumName\## TrackName.mp3


I stated the primary goal was to get all this music playable on all my devices. Those basically fall into a few categories:


Since the only way to get music onto iThings is via iTunes, I need to get all this stuff loaded into iTunes.  Music from the iTunes Store, Amazon Music Store, and Other are all pretty easy - just point iTunes at the right folder and you're done.  Since iThings don't support FLAC, though, I had to get the CD rips into a different form for iTunes.  This is the job of the ConvertLibrary tool mentioned in my previous post.  I'll write up a separate post on that, but basically what it does is synchronize a music collection in different formats, resulting in
Converted CDs\AlbumArtist\AlbumName\## TrackName.mp3
I currently sync into mp3 but have been meaning to re-generate my library to AAC, since it's more space-efficient and I've been running out of space on my iThings.


I set up a Sonos system in our house a while back, since we have in-wall speakers in a number of different rooms.  The Sonos needs to play music off the network, so I point it at a NAS (Network Attached Storage) on our home network.  A batch job runs every day that ensures the NAS has a current copy of all the music Source folders from above.  I could point the NAS at the individual folders on my home PC, but it's good to have a copy on the NAS anyway.

Google Play Music and Amazon Cloud Player

I don't really use either of these that much but have been tinkering with them a bit.  I set these up basically the same as iTunes - point them at the folders for each Source.  I have Google Play Music set to use the Converted CDs folder instead of the original FLAC rips, though since Google Play Music limits storage by songs instead of size, I suppose I should use the FLAC folder instead (though they'll convert to 320Kbps mp3). 

To Do

A bunch of stuff still doesn't work quite the way I want.  Most notably, there's no synchronization of playlists across devices.  It looks like Sonos has some support for reading iTunes' playlists out of your iTunes library, but since my Sonos uses a different set of files, I think I'll need to do something else.

Many steps are still manual that should be automated:
  • When I rip a new CD, I have to manually run the ConvertLibrary tool to generate an iTunes-friendly copy; I need to update ConvertLibrary to monitor the folder and run automatically.
  • When any new music is added, I have to manually update the NAS copy for the Sonos (or wait for the batch job to run); similar to the first point, this should monitor the folders for changes.
  • I don't have a good system for getting appropriate album art.  Any recommendations?
  • My NAS uses FAT, which means it can't handle Unicode characters in filenames - either need to restrict character set for filenames or figure something else out.