Last Christmas (2006) I gave my father a USB turntable so he
could start ripping his hundreds upon hundreds of vinyl albums to MP3. Of course I assumed that all was going well
for most of the year, as he was using it and seemed happy with it.
Then about 2 months ago I actually got a copy of the Simon
and Garfunkel song Cecilia from him (don’t tell the RIAA) and I noticed that it
didn’t show up in my Zune software or in WMP.
A little further digging and I found it down in “unknown artist, unknown
album, unknown song”. How wonderfully useful. So I asked him why the hell it didn’t have
the track info. He replied that the
software he has basically ripped the vinyl to one giant wave file, then another
piece of software would divide it into MP3 tracks, but it didn’t have a good
way of tagging each track efficiently.
To give it track info, he’d have to pull it into some other software
like WMP and alter it there, which is a very tedious process.
Well I decided to take a look into how media playback
software actually got the info about the tracks. I assumed it was something embedded in the
software so I did a little searching for a specification, and found that the
info is indeed stored in what is called an ID3 header tag. Well since I enjoy writing software from
nothing but a spec (really, I do – masochistic I know) I decided that maybe I’d
put together some software that makes tagging albums just a bit easier using
mostly drag and drop and inferring info based on how it’s organized in the file
The first step, however was to create a library that allowed
me to read and write the ID3 tags. That
yielded the OpenNETCF.Media.MP3 library (this library does *not* offer MP3
playback capabilities, so don’t ask).
Once I had the library mostly done (meaning coded but not
heavily tested) I then started on a desktop application I called
AudioTagR. The idea behind AudioTagR is
that most people organize their music on their file system. My dad and I both have a single folder that
contains a folder for each artist. Each
artist folder contains one or more folders for each album. Each album folder contains files that are the
MP3 songs, and the song filenames are in the format “NN <song name>.mp3”
where NN is the track number from the album.
AudioTagR assumes that you use this hierarchy to infer a lot of the
information about unknown tracks (though it allows you to turn off inferring).
So the paradigm is that on the right is a folder view of the
file system, with a root being the “root” of where your music is stored. On the left is an “organizer” that is used
for nothing but tagging tracks through inference. You drag a song from the file tree into the organizer
tree and it infers artist, album, song name and track if nothing exists. If some info exists, or you drop it onto a
node in the ordanizer that already exists, it will use node info instead of
inferring. The actual algorithm is a
little more complex than I feel like explaining, but it all makes logical sense
when you use it, so if you really want to know how it works, try it out.
So the day before Christmas I delivered v1 to him, and less
than 2 minutes later he found the first bug.
After a couple versions of deploying via FTP, I decided there had to be
a better mechanism. Since this is a
desktop app (yes, sometimes I begrudgingly work on non-CE stuff – but hey, the
ID3 tag library is fully CF-compatible) I decided I’d see what the whole
ClickOnce deployment and publishing stuff was about. Sure enough, it turned out to be crazy
simple, so I set up a publication that allows installation from a web page and
now the software auto-updates on his machine every time I make a fix.
So now that it’s
done, I guess that there may be other people out there that received these nice
USB turntables and are having a similar problem, so I say Merry Christmas to
you all. I’m giving away AudioTagR,
along with the full source if you want it, to everyone as another OpenNETCF shared
source project (MIT X11 license). Since it is free, you
get no support, and I take no responsibility for its use or consequences. If you screw up the titles on all of your
existing music I’m sorry but it’s not my fault.
Make a backup. If you find a bug,
by all means let me know and I’ll see what I can do to fix it. If you add a feature that you like, send me
the code and I can integrate it in.
If you simply want to install and use AudioTagR, click here.
Download the full source (C#) here
Get the OpenNETCF.Media.MP# library source here