Okay, this is a kind of pre-proposal for a foo_DAR ratings component.
This has come about for a number of reasons:
a) I totally see where Peter is coming from in regards to Title Formatting and the various components that have mis-used it (see
here for why).
b) I recently asked a question in the General HA forum regarding the treatment of SKIPPING and it led to
an interesting discussion on the problems of interpreting a %SKIP% (It doesn't get any more profound than the meaning of hitting NEXT

).
However, it solved a number of issues:
1) You can ignore %skip% and %play_count% entirely if you record
Total Playing Time (TPT) (thanks to Roseval for this).
Additionally if you divide TPT by %track_length% you get a perfectly accurate Play Count. Furthermore, this solves the problem raised by Martel
regarding Techno Mixes etc..2) A database is required and there are a number of issues that will need to be resolved regarding the frequency of Read/Write. Lyx has been helpful in this regard and there are technical issues that will have to be resolved; examples
here and
here.
3) The component would have to handle the following variables:
DAD = Days Since Added (to Library)
DLP = Days Since Last Played
DFP = Days Since First Played
TPT = Total Playing Time (total recorded playing time in seconds)
TL = Track Length (in seconds)
Notice that the smallest date unit required would be DAYS. However, there is a need to record System Date, so the component would have to do this by itself outside of foobar's core. What I would like is for the component to gather data, store it, run calculations and return a rating value which foobar2000 would pick up as though it was just another piece of meta data. This, I think, would bypass any issues relating to
repainting glitches.
I won't go into how this can be done, because I don't know. However, below I'll outline what I would like such a component to do, and also suggest how the interface would allow the tuning of the ratings algorithm very easily and effectively so it's aligned with how the user listens to their music (especially the "Individual Track" vs. "Album" listeners - Yes, I know it doesn't split down the middle like that, but that's the point of tuning).
Below is the ratings formula and some graphs to show the potential effect of user controlled variables in foo_DAR:
DATA REQUIRED
DAD = Days Since Added (to Library)
DLP = Days Since Last Played
DFP = Days Since First Played
TPT = Total Playing Time (total recorded playing time in seconds)
TL = Track Length (in seconds)
The values in red are one's which would be controlled by sliders: ******************************************************************************************
R0 (Rating Stage 0: This is the foundation of the Rating, without any date adjustments + penalties etc) = (((((TL +
60) x
0.75) x (TPT / TL)) / 100)) + 1000) x 10
Note: ((TL + 60) x 0.75) smooths the Track Length around the point of 3 minutes (so everything < 3 mins gets increased and everything > 3 mins gets decreased.
The slider works with the following:
0. (TL + 0) x 1/1
1. (TL + 30) x 6/7
2. (TL + 60) x 3/4 (Default)
3. (TL + 90) x 2/3
4 (TL + 180) x 1/2
5. (TL + 540) x 1/4
6. (TL + 1620) x 1/10
7. (TL + 3420) x 1/20
8. (TL + 86220) x 1/480

As you can see if you purely listened to albums then you wouldn't necessarily consider a 10 minute track more important than the 3 minute track that precedes it (Levels 6 to 8 would be suitable). However, if you listen to individual tracks and shuffle things around much more, then you may want to weigh a track that takes up 40x more of your life/attention higher than a 1 minute ditty.
******************************************************************************************
DD (Date Difference Multiplier) = ((DAD - DLP) + 50) / 10
******************************************************************************************
PP (Play Per Period Multiplier) = ((TPT / TL) x 10000) / DAD
******************************************************************************************
PEN1 (Age Penalty) = DAD x
1.25
If a track has been in the library for 2 years, it is likely to have been played far more than a track that has been in the library for 1 week. This is the purpose of the Age Advantage suppression slider:
Level
1. 0.50
2. 0.75
3. 1.00
4. 1.10
5. 1.20
6. 1.25 (Default)
7. 1.30
8. 1.40
9. 1.50
******************************************************************************************
PEN2 (Penalty for Not Getting Around to Playing a New Track) = ((DAD - DFP) x
5) / (TPT / TL)
Slider would select a number between 1 and 10 with 5 being the default.

******************************************************************************************
TPEN: Total PenaltyPEN1 + PEN2
******************************************************************************************
R1 (Rating Stage 1)R0 + ((PP x DD) / 100)
******************************************************************************************
R2 (Rating Stage 2)(R1 - TPEN) + (PP /
40)
This suppresses the advantage of new tracks (e.g. if you add a new track and play it twice and then extrapolate that behaviour you'd listen to it 730 times a year). This suppresses that advantage.
Slider scale from:
1. 20
2. 30
3. 40 (Default)
4. 50
5. 60
6. 70
7. 80
8. 90
9. 100

This is what happens when both the New Track (Play Per Period) Suppression and the Age Advantage Suppression variables are applied together, first in tandem (i.e. both from low to high):

then inverted, Age Advantage (low to high); New Track Advantage (high to low):

******************************************************************************************
R3 (Rating Stage 3: Set Rating Floor at 1)IF R2 > 0 THEN R2 OTHERWISE 1
******************************************************************************************
R4 (Rating Stage 4: Set Pseudo Rating for New Tracks < 8 days old)IF DAD > 7 THEN R3 OTHERWISE 10000
******************************************************************************************
OUTPUT RATING: IF TPT > TL THEN R4 (padded from left with 0s) OTHERWISE DISPLAY "------"
i.e. rating 2 songs, one rated 8500 the other not rated looks like:
SONG1 08500
SONG2 -----
******************************************************************************************
Additionally I would like the user to have an option as to whether to display symbols or a numeric value. Personally I prefer the latter, but I think many would like "something easier on the eyes", like a star rating system. I'd like the user to have that option.
That's it for now.
I'd be very interested in people's view as to how this could be implimented (in a way that avoids the pitfalls of older components that have now found themselves defunct).
Lyx has already been extremely helpful and I hope to have addressed a number of issues he raised in
this thread.
The questions are, a) technically how can this be done? and b) is it worth it?
I'll answer (b). YES, IMHO.
What about (a)?
C.