Jump to: Menu

Resilient ID3 embedded ratings

'Rating' column values reflected in the 'Grouping' column as raw text

Rating songs is by far the most time-consuming task to perform when you polish an album properties. Unlike the tagging process, it can not be automated (see A look at the stars) and may require a few full plays of the song to be accurate.
Because of that personal investment, ratings constitute one precious information that one can’t afford to lose, yet there is no gold standard method to store them.

The infamous POPM tag

The classic way to store information (aka metadata) related to a mp3 file consists to embed it in its ID3 header. Cover art, lyrics and identification properties (eg artist and album names, release date, etc.) are widespread metadata and thus are editable using any average music player.

It gets trickier when considering ratings.
On one hand, there does exist a Popularimeter (POPM) tag dedicated “to specify how good an audio file is”. Yay!
On the other hand, POPM tag has a value range spanning from 0 to 255 with no interpretation set in stone. The core of the issue is that the user interacts with a 5 star scale to rate a song whereas the software has to cope with an internal representation of 256 values.
As a result, every music player that supports this tag use its own heuristic to do the mapping, which makes ratings cross-application compatibility a nightmare.

Make the ratings persistent

Because ratings cannot be embedded as smoothly as other metadata, I advocate an hybrid method that couples two different ways to store the information :

  • use the integrated ratings system of your media player to assign ratings. Feel free to use these ratings to customize your playback selection inside your player.
    Note: under the hood, some players store ratings in internal databases (eg Amarok, iTunes) whereas others write into the POPM tag.
  • backup the player ratings periodically. Embedding data in the mp3 file and not being tied to the player representation is the key here.
    Screw the POPM tag. Just choose a common editable field which had no use for you until now and dump your ratings into it, in my case I decided to go with the Grouping tag.
    Keep this field in sync with your player ratings and use it as reference for the day you’ll need to migrate your ratings to comply with another music player.

Watch the screencast to see this method applied to the transfer of ratings from iTunes to MediaMonkey.