Ok, so it’s a new year and I’ve decided it’s finally time to abandon the bloated and crapulent Windows Media Player as my tool for managing my music collection and return to the loving arms of Winamp. The only reason I’ve used WMP at all is because I’m somewhat obsessive about correctly tagging & rating my music. WMP does have nice integration with Allmusic.com for filling out tags automatically, and it had a plugin that would write the ratings into the ID3 tags of the files in order to back them up. I say had, because when WMP10 came out that plugin was broken and there’s been no update to it since. I rely heavily on those ratings for building playlists, and since it took a ridiculous amount of time to assign them in the first place I’ve got to make sure that I keep those ratings stored in the files in a format that as many other programs as possible can read. However, due to the way the ID3v2 spec allows for ratings to be stored and the way that most media libraries/players actually handle them (if at all) this has turned out to be fairly frustrating.

In the ID3v2 spec, ratings are assigned to be stored in a frame of the tag named “POPM”. There can actually be multiple ratings in the tag, and each rating is associated with a string (an email address is suggested in the spec). This way if a file is passed around, each user can assign their own rating to it without overwriting the others. The rating itself is stored as a value from 0-255. This is where things begin to get problematic. Most media players that handle ratings represent them as a 0-5 star ranking. Obviously there are multiple ways to map this 0-5 rating onto the 256 possible values allowed in the ID3 tag. One program might choose to make 0-5 correspond exactly to 0-5 in the tag while another might store a 1 star rating as 51 in the tag, a 2 star as 102, all the way up to a 5 star as 255. As if this weren’t enough, it seems that rather than checking for multiple possible ratings in a tag, programs will typically just use the first one that they come across. Alternately, they may only expect ratings to be associated with a string that they define. For example, the WMP plugin would associate its ratings with the string “Windows Media Player Series 9″ and would fail to import the ratings if it found any other ratings. And sadly, these are the better attempts to handle the POPM frame. Several other programs that I’ve tried simply ignore it and store the rating in a comment (“COMM”) frame. This is virtually useless as it all but guarantees that other programs will fail to recognize it as a rating.

Fortunately, despite all the frustrating lack of support for this tag there are a few bright examples of software that Does The Right Thing. For Winamp, the absolutely brilliant plugin ActiveWinamp allows you to control Winamp and its media library through Visual Basic scripting. In conjunction with the ID3lib COM library, this can be used to write scripts to import and export the ratings from the ID3 tag into the media library and vice versa. It can be run on all your mp3′s at once and it actually will take into account multiple ratings being present in the header, plus you can define your own string to be associated with the rating. This gives me the opportunity to import all the ratings stored by Windows Media Player and then export them back in a better format (WMP used a pretty odd method of mapping its star ratings into the 0-256 scale of the POPM frame).

For examining my tags and verifying their integrity, I haven’t come across any program more impressive than ID3-TagIT. Most ID3 tagging programs, even those that are supposed to support ID3v2 only support the most commonly used field. This means they either ignore the ratings in the POPM frame(s) or they seem to make the mistake of only acknowledging the first rating that they find. Not so with ID3-TagIT. This is the most thorough tagging software I’ve ever seen. Every possible field of the header is examined and more importantly to me it displays all of the ratings in the tags and their associated strings (screenshot). You can even rearrange the order of the ratings so that you can control which rating will be hit first by the programs that only go with the first rating they come across. I can’t believe that after the ID3v2 spec has been out all this time that this seems to be the only tagging program to fully support it but I’m sure glad I found it. While it’s not really designed to handle batch rating operations the way ActiveWinamp can, this is a great program to have around to verify that the ratings in your files are still there if for some reason some media player won’t show them, or to see exactly the format that a specific media player saves its ratings as.

Thanks to these smart programs I can finally free myself from Windows Media Player (and maybe win back a little respect from my fellow geeks) without having to worry about losing all the time I spent adding useful ratings to my mp3 collection. It’s about time.

Just found your blog because I’ve been searching for ways to do the same exact thing (store ratings into mp3). I think I can come up with a solution that can do this. Just a simple vbs that integrates with winamp.