I have an idea for implementing manual song ratings on the player, similar to some of the ideas in
this thread. Here's how my approach would work (thanks to tman for some help in fleshing out the details):
1. A user app (emphatic, of course) provides a simple UI for the user to select their rating of a song (on a 1-5 or 1-10 scale.)
2. The app writes this numerical rating to that FID's "Plays" count on the dynamic data partition.
3. The player's attempts to write the real "Plays" count are blocked (no-op'ed) by Hijack.
With these mechanisms in place, a custom shuffle mode which uses the PLAYS variable could now be effectively used as a "play my favorite (highest-rated) songs" feature. So you don't get the same sequence each time, a RANDOM coefficient could be added to scatter them around a bit once they're sorted by rating.
The principal advantages of my proposed implementation over the comment field approach would be:
1. Song ratings would be done on-the-fly while listening in your car, instead of having to pre-rate them before you load them on your player.
2. No need to bastardize the comment field with numerical ratings (I keep other stuff in my comment field.)
3. No need to have an even distribution of song ratings or play with coefficients of shuffle modes.
The biggest drawback I can think of for my approach is that ratings would be stored on the dynamic data partition and not in the music file itself. Because of this, losing your dynamic data partition (resyncing your music collection, etc.) would lose this data as well. To avoid this, I could provide a utility to read/write ratings between the dynamic data partition and an ID3v2 field.
The other drawback (minor IMHO) is that, because the plays count is used to hold the rating, shuffle modes like "Least Often Played" would no longer work. I never use this mode, so that doesn't bother me.
There are a couple safeguards that would have to be in place for this to work. For one, emphatic would have to check the player software version before it decides to do any writing to the dynamic data partition. Hijack would also need to only block the plays count from being written on versions of the player software it knows about (so it doesn't Do The Wrong Thing if the dynamic data partition layout changes.)
Already, I've proven that steps 1 and 2 of my theory work. I have a test program that can replace the Plays count with a value of my choosing, and I have a shuffle mode that uses these plays counts to sort my tunes into order by rating, with a little randomness thrown in:
shuffle1=Favorites,PLAYS=-32000,RANDOM=16000
.
There are still a couple things I need to work on, the main one being that with this shuffle mode, songs that haven't been played yet will have a zero stored in the Plays count, thus won't get played until the very end. To fix this, I might be able to invert the scale (and the shuffle mode coefficients), such that a rating of 0 means "my favorite song" and new songs are assumed to be rated highest until you rate them manually. I'll have to try this out.
Anyway, I'd like to hear if anyone has any interest in this. Would anyone other than me actually take the time to subjectively rate their songs when they're playing? Is anyone using the comment field approach to do this? I think this idea has a lot of potential, especially considering 99% of the time I'm listening to my whole collection shuffled. If you think this is a good idea, or think you have a better idea, I'm all ears.