Feeds:
Posts
Comments

Archive for May, 2009

So everyone’s got a bunch of MP3 files stashed away in a folder. Chances are, many of them don’t have proper filenames, and look something like:

C:\Music\Unknown Artist\Unknown Album\QSCD.mp3

However, there is hope – especially for aspiring programmers. Your mp3 files may already have the track name, artist and album details stored in ID3 tags – if you’re able to see this information in iTunes/Windows Media Player/Winamp.

This problem started bugging me a while ago while I was switching from iTunes to Winamp, and my appetite for a suitable Computer Science activity growled eagerly. I thought of trying a Java-based solution – it went somewhat like this:

  1. Find a free (& maybe open source) Java ID3 reader package
  2. Learn how to enumerate files in a directory and pick out MP3s
  3. String this knowledge together

The solution was pretty simple:

  1. The JID3.jar package has support for reading and writing to ID3 tags – both v1 and v2 and it’s free-ish licence suted me just fine. They had a couple of code samples on the site too.
  2. I remembered seeing an example of this a couple of source code files ago, and googled. Apparently it’s a simple matter of:
    File folder = new File("C:\Music\");
    File[] subFiles =  folder.listFiles();
    
  3. The final utility turned out to be pretty simple. At the heart of the code was this tag-reading snippet:
MP3File mp3file = new MP3File(file);
ID3Tag[] id3Tags = mp3file.getTags();
String title = null;
for (ID3Tag tag : id3Tags)
{
if (tag instanceof ID3V1_0Tag)
{
System.out.println("ID3v1: " + file.getName());
ID3V1_0Tag tag1 = (ID3V1_0Tag) tag;
if ( (title = tag1.getTitle()) != null)
return title;
} else if (tag instanceof ID3V2_3_0Tag)
{
System.out.println("ID3v2_3: " + file.getName());
ID3V2_3_0Tag tag23 = (ID3V2_3_0Tag) tag;
if ( (title = tag23.getTitle()) != null)
return title;
}
}

But that was far from the end of the project. I wanted this thing to run through my entire music folder and apply itself to every “.mp3” file. As a bonus, it needed to remove track numbers from files like “01 Sage of Lamberene.mp3”. A most pleasurable evening later, it was finished. “public class MP3TagFileRenamer” even featured a recursive method to tackle subfolders within subfolders.

For those who’d like to tinker with it, here’s the source code. A bit messy, but legible and modular nonetheless. Legal Notice: Play all you want with it – but I am not liable for any (potential) damages incurred.

Future updates? The next step would be renaming folders to match the ID3 tags, the media players can take it from here…

Enjoy! 😀

Read Full Post »