UPDATED: 30.04.08
[for Setup instructions, latest versions, code etc. see Post#2]
Introduction
I came up with this is because I never really liked fixed ratings that were based on how I felt about a song (as that would change from day to day), plus I couldn't be bothered to rate every song in my collection. Instead, I found it more interesting to find out how I "felt" about a song (over time) by automatically rating it according to my actual listening behaviour.
Consequently this rating scheme ignores subjective criteria and doesn't utilise pre-existing user defined ratings, instead it's based entirely on data collected by foobar2k (+ components).
The formula may make an interesting companion to users' existing ratings schemes as well as to topdownjimmy's hotness algorithm.
The formula attempts to cancel out various disparities caused by, for example:
- play counts (old tracks having a great advantage over new ones)
- plays per time period (new tracks having an advantage over old ones)
- track duration, where short tracks are likely to be played more (and skipped less) than very long ones.
It should work regardless of play habits and should not require tweeking, however if people want to alter and improve it - please go ahead. At present I'm more than happy with the results and I'm likely to leave it as it is, barring a major flaw (which is possible - but so far not encountered).
---------------------------------
So, what does it do?
The rating is based on a number of factors:
- How often a track is played and how often it is skipped.
- The duration of the track (obviously a 2 minute piece is likely to be played more often and skipped less often than a 30 minute track).
- How long the track has been in the library.
- When it was last played.
- When it was first played.
- Files that are less than a week old get a temporary "pseudo rating" until the "probabationary period" is over.
Once a track has been played it will gain a rating.
The rating will continue to fall until it is played again.
Skipping a file will increase this decline.
A new track can compete with an old one:
Two 3 minute songs, both played today. Track A is 2 weeks old and Track B is 1 year old. If Track A has been played 5 times, to have the same rating Track B will have to have been played 28 times (28.25 times to be precise). Assuming Track B is skipped 1 time in every 5 plays (as it's an "old" song), then (let's now call it) Track B(2) will have to have been played 30 times (30.08 times to be precise) to equal Track A's rating.
Long tracks can compete with shorter ones:
A long track is likely to get skipped more often than a short one. Let's say Track C is 5 times as long as Tracks A and B. Like B it's 1 year old and like A and B it's been played today. So Track C is 15 minutes long. Let's say, for every time it's been played it's been skipped. To achieve the same rating as A and B, Track C will have to be played 15 times (14.9 time to be exact). Now let's say Track C hasn't been played today, instead the last time it was played was 6 months ago. Then Track C(2) would need to have been played 16.33 times to achieve parity with Tracks A and B.
If a song has a negative value, you may want to consider deleting it:
The foo_DAR rating has been designed to avoid negative values. For example. a 3 minute song (Track D), which was added to the library 10 years ago, and was played once 5 years ago, and has since been skipped 605 times will still not have a negative rating;
How often can you listen to the same song?
A 3 minute song (Track E) added 2 weeks ago has been played 5 times a day since being added. 70 plays in two weeks and not once skipped yields a rating of: 15743.
A rating of 10000 and above is good (though that depends on how much you listen to your music and the size of your collection).
A 3 minute song (Track F), never skipped, would have to be played 15.18 times in its first year to remain on 10000 (this is the same as the "pseudo rating" value given to tracks less than a week old).
NEW: Tracks that are not played for a long time after they have been added are penalised:
Let's say track F wasn't played immediately after it was added to the library a year ago; instead, all of its plays occurred in the last week. Track F(2) would have to be played 18.42 times (rather than 15.18 times) to achieve its rating of 10000.
---------------------------------
Test it first: You can test the ratings formula before implimenting it with this Excel sheet (which includes the examples above). Please note, there are minor discrepencies in the output due to differences in the way foobar2k and MS Excel handle dates and rounding.
My guess is that for most people, ratings across their entire collections will range between 8000 and 12000, with anything over 10000 being regarded as a good to very good track.
Works fine with cue sheets.
---------------------------------
Please read the setup instructions and "how to" info in Post#2 before asking any questions, thanks.
Oh, and a quick thanks to all on this forum who have helped with all and any foobar related questions I've had.
Cheers
Carpman.
***********************
Change log: foo_DAR v.3 -- 30/04/08
updated foo_DAR_noskip so the effect of duration is slightly reduced (this mirrors the negative effect of the %skip% function in foo_DAR_full). Also included a penalty weighting (for both versions) for tracks that are not played for a long time after they've been added. The penalty is reduced the more the track is played, ultimately becoming inconsequential.
Change log: foo_DAR v.2 -- 25/04/08
fixed 1.25 multiplier error (was defaulting to 1, rather than 1.25)
----






