Skip to main content
Topic: foo_DAR: auto rating (Read 96794 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

foo_DAR: auto rating

[!--sizeo:3--][span style=\"font-size:12pt;line-height:100%\"][!--/sizeo--]foo_DAR: [/size]Date Adjusted Ratings (or Digital Audio Ratings) Formula for foobar2000

[!--sizeo:2--][span style=\"font-size:10pt;line-height:100%\"][!--/sizeo--]IMPORTANT UPDATE (10th October 2010)[/size]

Latest thread for DAR (previously foo_DAR) is here:
http://www.hydrogenaudio.org/forums/index....c=83954&hl=

C.


**************************

IMPORTANT UPDATE  (1st November 2009)

1) foo_DAR is NOT supported in recent versions of foobar2000 (since 0.9.5 onwards). [CROSSED OUT 11/10/10] For a summary of the issues see this post: http://www.hydrogenaudio.org/forums/index....st&p=631184

2) foo_DAR was poorly named, please do not mistake this for a foobar2000 component, it is NOT, it's merely a formula that utilises a number of third-party components (some now deprecated).

3) Though I've stopped releasing the formula [CROSSED OUT 11/10/10] I've continued its development (for personal use) solving most, if not all the issues users had during its short lifetime. If anyone is interested in developing an auto-rating component feel free to either PM me or post to this thread.

Many thanks

C.


[!--sizeo:2--][span style=\"font-size:10pt;line-height:100%\"][!--/sizeo--]UPDATED: 30.04.08[/size]

[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; however, if it's skipped once more it will. Since v.3 a floor has been added so now a song's rating can only go as low as 1.

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.

Note: This rating formula has been tested with an individual track based library. I'm not sure it will work too well on images and cue sheets etc... That depends on how foobar2k and the relevant components treat these files. It may work fine.
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.

***********************

[!--sizeo:1--][span style=\"font-size:8pt;line-height:100%\"][!--/sizeo--]
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)
[/size]
----
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #1
[!--sizeo:3--][span style=\"font-size:12pt;line-height:100%\"][!--/sizeo--]foo_DAR Setup & Other Useful Info[/size]

[!--sizeo:2--][span style=\"font-size:10pt;line-height:100%\"][!--/sizeo--]UPDATED: 04.05.08[/size]

There are 2 versions of foo_DAR:

1) foo_DAR_full: for foo_playback_custom (this is the official release and has full functionality)
2) foo_DAR_noskip: for foo_playcount (thanks to Bollerkopp for raising this issue - this has been modified for users of the official playback stats plugin and lacks the %skip% function)

foo_DAR_noadded is no longer supported. If you don't have an %added% field, find and replace %added% with %first_played%. However, although you will still get sensible results, this is not an ideal replacement for either foo_DAR_full or foo_DAR_noskip.


Required components and fields for each version:

1) foo_DAR_full for foo_playback_custom

Components required:
foo_custominfo.dll (tested with foo_custominfo 0.1.2)
foo_cwb_hooks.dll (tested with cwbowron's title format hooks 1.2.6 [Jan 2 2008 - 15:50:05])
foo_playback_custom.dll (tested with Playback Statistics Custom 1.4.3)
foo_autoplaylist.dll (optional - to rank according to foo_DAR rating)
foo_ui_columns.dll (optional - but recommended -- has also been tested with 9.5.2 default ui)

Fields used in the ratings formula:
%length_seconds%
%play_counter%
%skip% (skip count)
%added% (this is the date the file was added to the library)
%last_played% (date last played)
%first_played% (date first played)
%cwb_systemdatetime% (time now)

Download the LATEST SETUP INSTRUCTIONS for foo_DAR_full

----------------------------------

2) foo_DAR_noskip for foo_playcount

Components required:
foo_playcount.dll (tested with Playback Statistics v.2)
foo_cwb_hooks.dll (tested with cwbowron's title format hooks 1.2.6 [Jan 2 2008 - 15:50:05])
foo_autoplaylist.dll (optional - to rank according to foo_DAR rating)
foo_ui_columns.dll (optional - but recommended -- has also been tested with 9.5.2 default ui)

Fields used in the ratings formula:
%length_seconds%
%play_count%
%skip%
%added%
%last_played% (date last played)
%first_played% (date first played)
%cwb_systemdatetime% (time now)

(see setup section below for code and info)

----------------------------------

If you enter any of the above fields (or their alternatives i.e. instead of using %play_counter% you use %play_count%) into a column and you get a sensible result then the formula will work, if you do not, then you are missing a required component. A quick search will tell you which one you require.

If you do use an alternative field to those listed above just do a find and replace on the formula and it will work.

************

SETUP

FORMULA: (1) foo_DAR_full for foo_playback_custom

Code: [Select]
$puts(ra,$mul($add(1000,$div($mul(%length_seconds%,$sub(%play_counter%,$div(%skip%,2))),100)),10))$puts(dd,$div($add($cwb_datediff(%added%,%last_played%),50),10))$puts(pp,$div($mul(%play_counter%,10000),$cwb_datediff(%added%,%cwb_systemdatetime%)))$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))$puts(pd3,$div($mul($cwb_datediff(%added%,%cwb_systemdatetime%),125),100))$puts(pd4,$div($get(pp),40))$puts(pd5,$div($mul($cwb_datediff(%added%,%first_played%),5),%play_counter%))$puts(pd6,$add($get(pd3),$get(pd5)))$puts(r1,$add($get(pd2),$get(ra)))$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd6))))$puts(r3,$ifgreater($get(r2),0,$get(r2),1))$puts(r4,$ifgreater($cwb_datediff(%added%,%cwb_systemdatetime%),7,$get(r3),10000))$ifgreater(%play_counter%,0,$num($get(r4),5),-----)
Paste as below (or default ui alternative):



FORMULA: (1) foo_DAR_full for Autoplaylist

Query field:
Code: [Select]
%play_counter% GREATER 0
Sort field:
Code: [Select]
$sub($puts(ra,$mul($add(1000,$div($mul(%length_seconds%,$sub(%play_counter%,$div(%skip%,2))),100)),10))$puts(dd,$div($add($cwb_datediff(%added%,%last_played%),50),10))$puts(pp,$div($mul(%play_counter%,10000),$cwb_datediff(%added%,%cwb_systemdatetime%)))$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))$puts(pd3,$div($mul($cwb_datediff(%added%,%cwb_systemdatetime%),125),100))$puts(pd4,$div($get(pp),40))$puts(pd5,$div($mul($cwb_datediff(%added%,%first_played%),5),%play_counter%))$puts(pd6,$add($get(pd3),$get(pd5)))$puts(r1,$add($get(pd2),$get(ra)))$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd6))))$puts(r3,$ifgreater($get(r2),0,$get(r2),1))$ifgreater($cwb_datediff(%added%,%cwb_systemdatetime%),7,$num($get(r3),5),10000),100000000)
Paste as below:


----------------------------------

FORMULA: (2) foo_DAR_noskip for foo_playcount

Code: [Select]
$puts(dur,$div($add(%length_seconds%,180),2))$puts(ra,$mul($add(1000,$div($mul($get(dur),$sub(%play_count%,$div(%skip%,2))),100)),10))$puts(dd,$div($add($cwb_datediff(%added%,%last_played%),50),10))$puts(pp,$div($mul(%play_count%,10000),$cwb_datediff(%added%,%cwb_systemdatetime%)))$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))$puts(pd3,$div($mul($cwb_datediff(%added%,%cwb_systemdatetime%),125),100))$puts(pd4,$div($get(pp),40))$puts(r1,$add($get(pd2),$get(ra)))$puts(pd5,$div($mul($cwb_datediff(%added%,%first_played%),5),%play_count%))$puts(pd6,$add($get(pd3),$get(pd5)))$puts(r1,$add($get(pd2),$get(ra)))$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd6))))$puts(r3,$ifgreater($get(r2),0,$get(r2),1))$puts(r4,$ifgreater($cwb_datediff(%added%,%cwb_systemdatetime%),7,$get(r3),10000))$ifgreater(%play_count%,0,$num($get(r4),5),-----)

FORMULA: (2) foo_DAR_noskip for Autoplaylist

Query field:
Code: [Select]
%play_count% GREATER 0
Sort field:
Code: [Select]
$sub($puts(dur,$div($add(%length_seconds%,180),2))$puts(ra,$mul($add(1000,$div($mul($get(dur),$sub(%play_count%,$div(%skip%,2))),100)),10))$puts(dd,$div($add($cwb_datediff(%added%,%last_played%),50),10))$puts(pp,$div($mul(%play_count%,10000),$cwb_datediff(%added%,%cwb_systemdatetime%)))$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))$puts(pd3,$div($mul($cwb_datediff(%added%,%cwb_systemdatetime%),125),100))$puts(pd4,$div($get(pp),40))$puts(r1,$add($get(pd2),$get(ra)))$puts(pd5,$div($mul($cwb_datediff(%added%,%first_played%),5),%play_count%))$puts(pd6,$add($get(pd3),$get(pd5)))$puts(r1,$add($get(pd2),$get(ra)))$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd6))))$puts(r3,$ifgreater($get(r2),0,$get(r2),1))$ifgreater($cwb_datediff(%added%,%cwb_systemdatetime%),7,$num($get(r3),5),10000),100000000)
----------------------------------


Docs:

Setup Instruction for foo_DAR_full
Step by step formula description
foo_DAR ratings formula test sheet
HOW TO get sensible %added% data when playback stats pre-date the existence of an %added% field
foo_custominfo.dll (as wiki link is down)

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #2
hi,

wow... this is just amazing! i don't like to rate every song in my collection, too. so i loved the "hotness"-algorithm very much. but i use the autoplaylist, where hotness isn't working. your algorithm do it - so it's perfect for me.  i want to thank you - i love it!

one question: i don't use the foo_custominfo-component and the foo_playback_custom-component. instead i have the foo_playcount-component. so i edited the algorithm in %play_count%. in the autoplaylist-string i edited it, too. it is normal that in the query is a song with the rating of 10025 on rank first and an song with the rating 10112 on rank second?

greets

foo_DAR: auto rating

Reply #3
one question: i don't use the foo_custominfo-component and the foo_playback_custom-component. instead i have the foo_playcount-component. so i edited the algorithm in %play_count%. in the autoplaylist-string i edited it, too. it is normal that in the query is a song with the rating of 10025 on rank first and an song with the rating 10112 on rank second?

Hi Bollerkopp

Thanks for your kind words.

If I understand you correctly, the answer is no. The autoplaylist should rank the songs according to rating.
If you are getting sensible results in your column output (and values of 10025 and 10112 sound okay) then that should show up in the autoplaylists ordering.

I suggest the following.

1) I had problems with the autoplaylist string because it needs to be a pure single line (i.e. with no additional spaces. When you edited the formula (I'd recommend editing in notepad) you may have (as I did a number of times) introduced breaks/spaces. Copy and paste the formula into a non-formatted text editor (like notepad and remove any breaks/spaces. Or copy the formula from the code-box above and carefully replace the fields you initially edited.

2) As a check, you can always enter these fields one by one (or your new replacement fields) into a new column and see if you get an expected outcome. If you do it means all is working well.

%length_seconds%
%play_counter%
%skip% (skip count)
%added% (this is the date the file was added to the library)
%last_played% (date last played)
%cwb_systemdatetime% (time now)

However, my feeling is that (1) is the problem. As clearly you are getting decent results, yet the ordering is problematic.

By the way do you have the %skip% field?
Are there any other fields above you are missing?

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #4
If I understand you correctly, the answer is no. The autoplaylist should rank the songs according to rating.
If you are getting sensible results in your column output (and values of 10025 and 10112 sound okay) then that should show up in the autoplaylists ordering.


here you can see my autoplaylist of the rating:

[a href="http://img222.imageshack.us/my.php?image=ratingec2.jpg" target="_blank"]

1) I had problems with the autoplaylist string because it needs to be a pure single line (i.e. with no additional spaces. When you edited the formula (I'd recommend editing in notepad) you may have (as I did a number of times) introduced breaks/spaces. Copy and paste the formula into a non-formatted text editor (like notepad and remove any breaks/spaces. Or copy the formula from the code-box above and carefully replace the fields you initially edited.


yes, i edited the algorithm in notepad - no breaks or spaces.

%length_seconds%
%play_counter%
%skip% (skip count)
%added% (this is the date the file was added to the library)
%last_played% (date last played)
%cwb_systemdatetime% (time now)

However, my feeling is that (1) is the problem. As clearly you are getting decent results, yet the ordering is problematic.

By the way do you have the %skip% field?
Are there any other fields above you are missing?


no, i don't have the %skip%-field.  so i have to use the other components? the %skip%-field is important?
the other fields i have - %play_counter% = play_count.

foo_DAR: auto rating

Reply #5
Right. Well the good news is that the formula works. Your results look good.
So the problem is with the autoplaylist.

Is the %skip% field important?
Not essential. It's nice, as skipping a song is quite telling - "I'd rather listen to something else" deserves to negatively affect a rating. As I say, nice, but not essential. 

1) Can you paste in a codebox (codebox, not /code) the formula directly from the autoplaylist box. Also can you do me a screen shot of the autoplaylist screen? (not essential - but would be helpful)
2) What version of foobar2k are you using?
3) What relevant components are you using and what versions?

I'll have a look at it.

I might do a version for people who use foo_playcount. Would be nice if there was some way to carry stats over from one to the other (i.e. %play_count% to %play_counter%. Perhaps there is.

I'll look into this. I'd rather not do 2 versions. But I guess if I had years of play stats I wouldn't switch to a rating algorithm that forced me to start afresh.

Where is the %play_count% data stored?

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #6
I'll test this at some point - but I think it's possible to switch your play count data and probably the other stuff too using foo_custom_info. I'm NOT suggesting you do this, but in custom info you can do this kind of thing (haven't tested yet by the way):

$add(%PLAY_COUNTER%,%PLAY_COUNT%)

That would, in theory, do a one off transfer of all your play_count data to the custom_info database (also may be a good way of backing up your play stats) which would store as %PLAY_COUNTER%.

Just a thought. Like I say I'll test such things when I have the time. 

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #7
Is the %skip% field important?
Not essential. It's nice, as skipping a song is quite telling - "I'd rather listen to something else" deserves to negatively affect a rating. As I say, nice, but not essential.

yes, you're right... i think it's a very nice thing in use with this rating, too. 

1) Can you paste in a codebox (codebox, not /code) the formula directly from the autoplaylist box. Also can you do me a screen shot of the autoplaylist screen? (not essential - but would be helpful)

sure:

Code: [Select]
$sub($puts(ra,$add(1000,$div($mul(%length_seconds%,$sub(%play_count%,$div(%skip%,2))),100)))$puts(ra2,$mul($get(ra),10))$puts(dd,$div($add($cwb_datediff(%added%,%last_played%),50),10))$puts(pp,$div($mul(%play_count%,10000),$cwb_datediff(%added%,%cwb_systemdatetime%)))$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))$puts(pd3,$div($mul($cwb_datediff(%added%,%cwb_systemdatetime%),125),100))$puts(pd4,$div($get(pp),40))$puts(r1,$add($get(pd2),$get(ra2)))$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd3))))$ifgreater($cwb_datediff(%added%,%cwb_systemdatetime%),7,$num($get(r2),5),10000),100000000)


2) What version of foobar2k are you using?

i use version 0.9.5.0.

3) What relevant components are you using and what versions?

- Core
  foobar2000 core 0.9.5

- foo_autoplaylist.dll
  Autoplaylist Manager 1.0

- foo_cwb_hooks.dll
  cwbowron's title format hooks 1.2.5

- foo_playcount.dll
  Playback Statistics 2.0

- foo_ui_columns.dll
  Columns UI 0.3 beta 2 preview 1

Where is the %play_count% data stored?

it's stored in the "PlaybackStatistics.DAT" in the foobar-folder.

I'll test this at some point - but I think it's possible to switch your play count data and probably the other stuff too using foo_custom_info. I'm NOT suggesting you do this, but in custom info you can do this kind of thing (haven't tested yet by the way):

$add(%PLAY_COUNTER%,%PLAY_COUNT%)

That would, in theory, do a one off transfer of all your play_count data to the custom_info database (also may be a good way of backing up your play stats) which would store as %PLAY_COUNTER%.

Just a thought. Like I say I'll test such things when I have the time.

ah, ok... sounds cool.

foo_DAR: auto rating

Reply #8
Thanks Bollerkopp.

Give me a little time.

I'll check your autoplaylist formula first. If I can't figure what's wrong I'll setup a new foobar install, probably with latest foobar and all your component versions. I've tested already on 9.4.3 and 9.5.2 beta - so foobar version is unlikely to be the issue. 

I'll get back to you when I've worked it out.

Cheers

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #9
oki, thank you very much. there's noch rush... take your time.

greets

foo_DAR: auto rating

Reply #10
Bollerkopp

I just inverted what you did:

I copied your autoplaylist formula from your codebox into notepad. I did a find and replace on %play_count% and replaced it with %play_counter%. I pasted that back into autoplaylist and it worked fine.

Which means everything you did works fine.
The only difference is that you don't have a %skip% field. My guess is that this confuses the hell out of autoplaylist, whereas foobar2k's core deals with it differently and just ignores missing fields or treats them as zeros in calculations. So 0 / 2 = 0, thus %play_count% - 0 = %play_count%. This would mean that the formula works fine in foobar2k but perhaps not fine in autoplaylist.

To test this can you do me a favour and try this:

In notepad:
Do a find and replace on "%skip%" (in the autoplaylist formula) and replace it with 1. From what I gather foobar2k rounds down. So it will treat 1/2 as 0.

Let me know if that works.

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #11
ok, i tried it, but i think that there is no difference. 



the edited autoplaylist-string:

Code: [Select]
$sub($puts(ra,$add(1000,$div($mul(%length_seconds%,$sub(%play_count%,$div([color=#FF0000][b]1[/b][/color],2))),100)))$puts(ra2,$mul($get(ra),10))$puts(dd,$div($add($cwb_datediff(%added%,%last_played%),50),10))$puts(pp,$div($mul(%play_count%,10000),$cwb_datediff(%added%,%cwb_systemdatetime%)))$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))$puts(pd3,$div($mul($cwb_datediff(%added%,%cwb_systemdatetime%),125),100))$puts(pd4,$div($get(pp),40))$puts(r1,$add($get(pd2),$get(ra2)))$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd3))))$ifgreater($cwb_datediff(%added%,%cwb_systemdatetime%),7,$num($get(r2),5),10000),100000000)

foo_DAR: auto rating

Reply #12
The only other thing I can think of right now is:
a) what's in your autoplaylist query box?
b) when you created your autoplaylist did you create a "new one", i.e. each time I update the formula I have to enter the new formula in the sort box, (then i press preview to check), then I "remove" existing playlist (in this case RATE) as in the picture in post 2, then reselect RATE as the "playlist to take over", then I hit "add to autoplaylist".

I assume you follow these steps too. Is that correct?

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #13
The only other thing I can think of right now is:
a) what's in your autoplaylist query box?


"%play_count% GREATER 0 OR %skip% GREATER 1"

b) when you created your autoplaylist did you create a "new one", i.e. each time I update the formula I have to enter the new formula in the sort box, (then i press preview to check), then I "remove" existing playlist (in this case RATE) as in the picture in post 2, then reselect RATE as the "playlist to take over", then I hit "add to autoplaylist".

I assume you follow these steps too. Is that correct?


yes, i do exactly the same procedure.

foo_DAR: auto rating

Reply #14
Try:
"%play_count% GREATER 0 OR %skip% GREATER 1"

See if that works.

[EDIT:  also: I'm just doing a foobar version to mirror yours using all your components that you mentioned with the latest foobar (9.5.2) - I have a question: what code do you use in the "process files added to the library" (is it a tagging script? and also, where do you store the date stamp info (i.e. %added%), in the tags?]

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #15
See if that works.


it's the same thing.

what code do you use in the "process files added to the library" (is it a tagging script? and also, where do you store the date stamp info (i.e. %added%), in the tags?]


yes, it's a tagging script (new file tagger) and it's stored as %ADDED% in the tags.

this is the code:

Quote
Time Stamp NOW
Format "ADDED" using $if($greater($len(%ADDED%),5),%ADDED%,%NOW%)
Remove NOW


greets

foo_DAR: auto rating

Reply #16
Just testing now.
So far on 9.5.2 all components except columns ui are the same as yours.

- Core
foobar2000 core 0.9.5.2 beta

- foo_autoplaylist.dll
Autoplaylist Manager 1.0

- foo_cwb_hooks.dll
cwbowron's title format hooks 1.2.5

- foo_playcount.dll
Playback Statistics 2.0

Files are tagged as per your script and I copied your Autoplaylist formula directly from your codebox into autoplaylist.

OUTCOME:
All properly sorted in formula order (high to low).

So I need to test with columns ui:

- foo_ui_columns.dll
Columns UI 0.3 beta 2 preview 1

I've been using:
Version 0.1.3 beta 1v7

Maybe that's it. If not then I think we need to ask the real foobar2k experts.
I'll post a pic of my results tonight.

Very strange.

C.

By the way which UI are you using (default or cols)?
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #17
Here's a pic of what I'm getting using %play_count% and components as stated above:
Screenshot of test results

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)


foo_DAR: auto rating

Reply #19
hey,

sooo sorry, it was my fault! damn, i forget to edit the first %PLAY_COUNTER% in the display-script of my rating-colum. omg... not my day. 

now it's working perfectly!  thank you so much and sorry, that i wasted your time with this simply mistake.

here is the result:

[a href="http://img73.imageshack.us/my.php?image=ratingworkingmm0.jpg" target="_blank"]

greets

foo_DAR: auto rating

Reply #20
hi Bollerkopp

  - You haven't wasted my time. I'm glad you solved the problem.
It's been interesting for me, as you've helped me find out that it works very easily with the official play stats plugin. Also I've found a way, I think, to port stats from the official foo_playcount to foo_playback_custom via the custom info plugin. I'll do a trial with this and, if it works well, I'll post a How To - should anyone decide they can't do without the %skip% routine [unless one already exists?].

I'd be very interested to know how many people use the official plugin versus the custom one and whether, if there was an easy way to move from one to the other, would people consider switching?

Really glad you liked the ratings.
Enjoy the results.

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #21
hi carpman,

that sounds very cool - i am very interested in a "how to", if it works.
i think the %skip%-routine is a cool thing for the rating

thx & greets

foo_DAR: auto rating

Reply #22
Just though I'd comment, as I don't use %added% I made a work around by approximating to ether the first play or last modified date (which ever is earlier:)
Code: [Select]
$puts(sd,$if($greater($cwb_datediff(%first_played%,%cwb_systemdatetime%),$cwb_datediff(%last_modified%,%cwb_systemdatetime%)),%first_played%,%last_modified%))
$puts(pc,%play_count%)
$puts(ra,$add(1000,$div($mul(%length_seconds%,$sub($get(pc),$div(%skip%,2))),100)))
$puts(ra2,$mul($get(ra),10))
$puts(dd,$div($add($cwb_datediff($get(sd),%last_played%),50),10))
$puts(pp,$div($mul($get(pc),10000),$cwb_datediff($get(sd),%cwb_systemdatetime%)))
$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))
$puts(pd3,$div($mul($cwb_datediff($get(sd),%cwb_systemdatetime%),125),100))
$puts(pd4,$div($get(pp),40))$puts(r1,$add($get(pd2),$get(ra2)))
$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd3))))
$puts(r3,$ifgreater($cwb_datediff($get(sd),%cwb_systemdatetime%),7,$get(r2),10000))

%play_count% -> %play_counter% if you don't use official.

foo_DAR: auto rating

Reply #23
That's a nice idea!
Sounds like it works too. 

Though, aren't you missing the final get statement from the bottom?:
$ifgreater(%play_counter%,0,$num($get(r3),5),-----)

I guess this is your actual code?

Code: [Select]
$puts(sd,$if($greater($cwb_datediff(%first_played%,%cwb_systemdatetime%),$cwb_datediff(%last_modified%,%cwb_systemdatetime%)),%first_played%,%last_modified%))
$puts(pc,%play_count%)
$puts(ra,$add(1000,$div($mul(%length_seconds%,$sub($get(pc),$div(%skip%,2))),100)))
$puts(ra2,$mul($get(ra),10))
$puts(dd,$div($add($cwb_datediff($get(sd),%last_played%),50),10))
$puts(pp,$div($mul($get(pc),10000),$cwb_datediff($get(sd),%cwb_systemdatetime%)))
$puts(pd,$mul($get(dd),$get(pp)))$puts(pd2,$div($get(pd),100))
$puts(pd3,$div($mul($cwb_datediff($get(sd),%cwb_systemdatetime%),125),100))
$puts(pd4,$div($get(pp),40))$puts(r1,$add($get(pd2),$get(ra2)))
$puts(r2,$add($get(pd4),$sub($get(r1),$get(pd3))))
$puts(r3,$ifgreater($cwb_datediff($get(sd),%cwb_systemdatetime%),7,$get(r2),10000))
$ifgreater(%play_count%,0,$num($get(r3),5),-----)

Good solution, just ran it -- works well.

By the way, does anyone know the relative popularity of foo_playcount versus foo_playback_custom?
I'd be interested to know.

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_DAR: auto rating

Reply #24
Ah yea, I have that in another part of my code so it missed the c&p. Just trying gauge the dynamic range so I can convert a number into something more "glanceable".

 
SimplePortal 1.0.0 RC1 © 2008-2019