Music Archive Project – Resources

I’ve recently been working on a tool to allow multiple users to maintain and contribute to an online library of music.

I was overjoyed to find MusicBrainz. I first looked at the offerings from Gracenote (owners of the CDDB) but was less than thrilled with the idea of paying for the service. MusicBrainz provides a free service for identifying songs and retrieving proper meta data (artist name, album name, track name, etc.). They actually do a fingerprint on the song itself, so even completely improperly labeled songs can be identified. Since there is so much improperly tagged music floating around, having correct tags in any long-term archive is important, especially if multiple users are contributing music.

I am also looking at the Last.fm Audioscrobbler API. The single most useful looking feature available there is the “Similar Artists.”

Another useful tool I found is the Bambalam PHP EXE Compiler which does exactly what it’s name suggests – converts php scripts to run very simply as executables on windows machines without lots of installation. This should simplify development, especially at the prototype stage, as I can use much of the same code from the server on the user’s machine, saving a large amount of server CPU time.

One design problem I’ve been wrestling with is how to handle multiple copies of the exact same song. It’s reasonable to allow multiple copies of a file at different bitrates and encoding options (Flac, MP3 – V0, MP3 – 192kb/s). The problem comes when a user is browsing the collection – they don’t want to see three copies of the exact same recording of “Marble River” in the search results for “Austin Hardt”. Instead they should see “Marble River”, and then when they view the file itself, they can select which file(s) they want (maybe Flac for the archive, and MP3 for the portable player). This can probably be made to work if I use the MusicBrainz UUID to override the provided tag data, ensuring correct classification.

Post a Comment

Your email is never published nor shared. Required fields are marked *