AutoRateAccurate - Release 1.61 (10/11/2006) [MM2]

Download and get help for different MediaMonkey Addons.

Moderators: Peke, Gurus

Guest

Post by Guest »

Hello Big_Berny,

This is MarS (the posting script tells me "Sorry, but this username has already been taken... bummer... someone got my nick]
Big_Berny wrote:By the way: When I started this script I asked you (MediaMonkey-forum-visitors) to help me tweaking the formula. Unfortunately nobody did.Big_Berny
Thanks for all your input. Now that the basic script is in place, tweaking it is the fun part, isn't it, so bummer on the above. But I'm very interested in this.
How many different variables (pieces of information) do you get from the DB, or what usefull information can be gotten? Do any of the pieces have a history? [Disclamer: I haven't programmed in ages (and never in Basic, but I can read it well enough)] Maybe it would work to structure the code in such a way as to expose each of the variables in the user I/F with either radio buttons, or a slide, as was suggested, to change their weighting in a given algorithm, and also to make the actual (*un-exposed" to the user) algorithm plugable, i.e. just like your single line replacements. This would make it easier to focus on the algorithm itself without the fear of "breaking" the rest of the code. If there is some history to any of the variables, then many interesting things could be done with that.
Big_Berny wrote:But as I said one of the favourite parts of my script is the AutoCalibration which allows you to change the formula very fast. :)
Big_Berny
Do you mean, letting the current algorithm get at the most current data, or is there some internal self adjusting that's done also?
Big_Berny
Posts: 1784
Joined: Mon Nov 28, 2005 11:55 am
Location: Switzerland
Contact:

Post by Big_Berny »

Hi MarS,
cool, that you want to participate. :)

I'll simplify the variables for the formula so you can easier change it. The available variables will be: PlayCounter, SkipCounter, PlayedPerDay, PlayedLastTime (in Days) and DaysInLibrary. You could also use variables like SongLength but I don't know if that would be useful. There's also a history but I don't want to implement that because plays of the portable (ipods for example) are not included.

Bye!
Big_Berny
Image
Scripts in use: Genre Finder / Last.fm DJ / Magic Nodes / AutoRateAccurate / Last.FM Node
Skins in use: ZuneSkin SP / Eclipse SP
AutoRateAccurate 3.0.0 (New) - Rates all your songs in less than 5 seconds!
About me: icoaching - internet | marketing | design
MarSOnEarth
Posts: 2
Joined: Mon Jan 08, 2007 11:01 pm

Information in DB

Post by MarSOnEarth »

What about information like:
- existing rating, and if, then when?
a - was assigned by the user, or by the script?
b - if assigned by the script, was it then changed by the user, and if yes, then when, and whether it was lower or higher then the script?

Just random thoughts.

MarS
TJOHO
Posts: 108
Joined: Tue Oct 31, 2006 8:00 pm
Location: A Norwegian in Seoul, Korea

Post by TJOHO »

Hey, Big_Berny, thanks for this formula:
Big_Berny wrote: This formula should be better for you:

Code: Select all

Points = Int(100 * (Song.PlayCounter-2*Skip)^5 / (DateDiff("d", Song.DateAdded, Now) + 1) / 1.01^(DateDiff("d", Song.LastPlayed, Now)+1))
I entered it in the script where you specified in a previous post, but now there is some strange behavior.

For example, I have two songs by Weezer that were added to the library on the same date. I listened to them both just now. So far, all the factors are the same.

The track "Beverly Hills" has a playcount of 3.
The track "My Name Is Jonas" has a playcount of 1.

Based on this, you would think the former has a higher rating than the latter, but it is the exact opposite!
"Beverly Hills" is rated 4, while "My Name Is Jonas" is rated 4.7 stars.

Hope you can help with this.
Big_Berny
Posts: 1784
Joined: Mon Nov 28, 2005 11:55 am
Location: Switzerland
Contact:

Post by Big_Berny »

TJOHO wrote:Hey, Big_Berny, thanks for this formula:
Big_Berny wrote: This formula should be better for you:

Code: Select all

Points = Int(100 * (Song.PlayCounter-2*Skip)^5 / (DateDiff("d", Song.DateAdded, Now) + 1) / 1.01^(DateDiff("d", Song.LastPlayed, Now)+1))
I entered it in the script where you specified in a previous post, but now there is some strange behavior.

For example, I have two songs by Weezer that were added to the library on the same date. I listened to them both just now. So far, all the factors are the same.

The track "Beverly Hills" has a playcount of 3.
The track "My Name Is Jonas" has a playcount of 1.

Based on this, you would think the former has a higher rating than the latter, but it is the exact opposite!
"Beverly Hills" is rated 4, while "My Name Is Jonas" is rated 4.7 stars.

Hope you can help with this.
Strange... In the formula I posted PlayedPerDay is also present but has much less influence. So maybe the difference of PlayedPerDay is very high. Another possibility is that Beverly Hills has been skipes some times. In my formula each skip decreases the PlayCounter by two.

Try this formula and tell me what happens. With this formula Berverly Hills should be better (or the same).

Code: Select all

Points = Int(Song.PlayCounter)
Big_Berny
Image
Scripts in use: Genre Finder / Last.fm DJ / Magic Nodes / AutoRateAccurate / Last.FM Node
Skins in use: ZuneSkin SP / Eclipse SP
AutoRateAccurate 3.0.0 (New) - Rates all your songs in less than 5 seconds!
About me: icoaching - internet | marketing | design
TJOHO
Posts: 108
Joined: Tue Oct 31, 2006 8:00 pm
Location: A Norwegian in Seoul, Korea

Post by TJOHO »

Yep, tried the formula and the two are the same.

I obviously don't remember what I skipped and what I didn't, but I highly doubt I skipped that song.

Whenever I need to skip something I don't want to go down in rating, I turn off the skip detection.
MMnoob1stdegree

I want MM to sync my ratings into my ipod & Vice Versa

Post by MMnoob1stdegree »

Hey guys...
Basically I want to be able to sync my ratings from my Ipod to my MM library, so i can obviously trim my library down slowly, and of course being able to do the vice versa would be great. I'm new to MM but I love it so far,
Thanks for any help
BerniPi
Posts: 34
Joined: Sun Oct 29, 2006 7:30 pm
Location: Sulz VORARLBERG
Contact:

Post by BerniPi »

Consider this; in a large collection (mine's hiting 5K albums), most songs are never played, but not because they're bad, but because it's not "their time", so they don't get a chance to get rated, but when they do get played, they receive high rating, and then they don't get played again for a very long time, and their rating plumets, and stays there, but that rating does not reflect their "value". I'd say, that if a song that's been in a collection for a very long time gets played occasionally, that that would be suggective of it's rather high "value", but the script assigns it a low one.

Another example; I get a new album, add it the the library, and then, because it is a new album, I give it a couple of listens. It not necessarily a good album, but I listen to it to find out if anything in there "rings a bell". The script will assign those songs a high rating, and that rating is quite persistant because those were consecutive listens in a short time span. It maybe a mediocre album, and I may never listen to it again (yet, often for completness, I will not delete it from disk), but in the mean time, it will show as a high rated album (and this "missleads" scripts as ScrobblerDJ). Were the script to start from a value like 2, or 2.5 and add a half a star for every couple of listens, a rating for an album in this example would be more realistic accross it's lifetime in the collection, i.e. go up reflecting a temporary increase in interest, and slowly decay as time progresses.
Some time ago MarS wrote this, and I reflected a bit about the formula.
I also don't want, that a new album has a greater value than an old one, so i simply deleted this part out of the formula.
The next point is, that when you like a song, but you don't think at it, and it doesn't get played, it looses in ratings, but I don't want that.
So I thought about make that impact dependent of the playcount.
In my formula, one or two time played songs loose their high ratings much faster than songs i like very much (played >10 times). and that's what i want.
another point was the skipping. i changed the factor 2 before skipping, by square, because it takes place from time to time that you skip a song (with the old formula it's -2 with mine only -1), but if you skip the song more often it's worse (it's the same for two skips 4 to 4 but the next time it's 6 to 9)

This is the formula i use now:

Code: Select all

Points = Int(100 * (Song.PlayCounter-Skip^2)^5 / 1.01^((DateDiff("d", Song.LastPlayed, Now)+1)/(Song.PlayCounter+1)))
I haven't tested this formula for a long time, maybe there should be some fine tuning with some factors or some powers (Hochzahlen).

Maybe somebody wants, that old songs get better rated than new ones (because you remember new songs you like much easier than old ones).
then a multiplication instead of a divsion before the Song.DateAdded block should do it (with some extra factors)
Image
Big_Berny
Posts: 1784
Joined: Mon Nov 28, 2005 11:55 am
Location: Switzerland
Contact:

Post by Big_Berny »

Hey BerniPi,
cool that you played a bit with the formula! In the next version I'll maybe add different pre-defined formulas so the users can choose. Have to think about it. But if I choose this solution I'll be happy to implement your formula as well.

Big_Berny
Image
Scripts in use: Genre Finder / Last.fm DJ / Magic Nodes / AutoRateAccurate / Last.FM Node
Skins in use: ZuneSkin SP / Eclipse SP
AutoRateAccurate 3.0.0 (New) - Rates all your songs in less than 5 seconds!
About me: icoaching - internet | marketing | design
TJOHO
Posts: 108
Joined: Tue Oct 31, 2006 8:00 pm
Location: A Norwegian in Seoul, Korea

Post by TJOHO »

@BerniPi: This looks like a really interesting formula, and I agree with all your reasoning behind it.

@Big_Berny: I hope you can include various formula in the script, preferably in an optionsheet or at least in comments in the script itself so users can choose.

Either way, it should have a clear help file that explains the effects of changing various parts of the formula to non-techies (these formula are Greek to me).

I.e.: if you want a dynamic rating system that reflects what you are currently listening to, pick this. However, if you want a rating system where older, but favorite tracks retain their high rating, pick this. etc.

That would make this an even more powerful script!

BTW, I found out what the problem was (see my posts above about inconsistent rating): You have to change the formula in two scripts, and in one of the scripts you have to change it in two places (correct me if I'm wrong). However, I had only changed the formula in one place in each script. :oops:
Big_Berny
Posts: 1784
Joined: Mon Nov 28, 2005 11:55 am
Location: Switzerland
Contact:

Post by Big_Berny »

@TJOHO: I'll surely implement it in the optionsheet with some hints.

Ou, you're right. You have to change the formula twice in AutoRateAccStarter.vbs! And once in AutoRateAcc.vbs. Thanks fr the information!
But as I said, I'll change that part so that it can be changed much easier.

Big_Berny
Image
Scripts in use: Genre Finder / Last.fm DJ / Magic Nodes / AutoRateAccurate / Last.FM Node
Skins in use: ZuneSkin SP / Eclipse SP
AutoRateAccurate 3.0.0 (New) - Rates all your songs in less than 5 seconds!
About me: icoaching - internet | marketing | design
BerniPi
Posts: 34
Joined: Sun Oct 29, 2006 7:30 pm
Location: Sulz VORARLBERG
Contact:

Post by BerniPi »

I've studied the code a bit and worked on an Excel-File, where I list the songdata and get the AutoRateAcc Rating.

It works great, so i can test a new formula very fast. If somebody is interested, just send me a PM.

Some questions:

First it happend something strange. In my new formula I divide the dayssincelastplayed by the PlayCount.
I tried to tune the formula by multiplicating the days with 2, and i got an overflow error. If I multiplicate the days with the PlayCount (instead of divide) all is good (and then i multiplicate with numbers up to 22).
If I double the days manually in the database all is ok too.
If I define a variable and multiplicate with the variable, i'll get an overflow error.

What's the problem here? Maybe somebody has a clue!!

@Big_Berny:
Is it right, that the skipcounter is limited to 8 skips? What does happen if it reaches this value or pass it?
Image
Big_Berny
Posts: 1784
Joined: Mon Nov 28, 2005 11:55 am
Location: Switzerland
Contact:

Post by Big_Berny »

Hi BerniPi,
strange. Can you send me a example of a formula which doesn't work?

You're right. The SkipCounter is limited by 8. After that it won't increase anymore. Maybe with MM 3.0 the script uses his won field in the database and then this limitation will be gone. But I think this hasn't much effect since because normally you don't skip a song more than 8 time and if you skip it the playcounter will mostly not increase anyway.

Big_Berny
Image
Scripts in use: Genre Finder / Last.fm DJ / Magic Nodes / AutoRateAccurate / Last.FM Node
Skins in use: ZuneSkin SP / Eclipse SP
AutoRateAccurate 3.0.0 (New) - Rates all your songs in less than 5 seconds!
About me: icoaching - internet | marketing | design
BerniPi
Posts: 34
Joined: Sun Oct 29, 2006 7:30 pm
Location: Sulz VORARLBERG
Contact:

Post by BerniPi »

I use this formula:

Code: Select all

Points = Int(100 * (Song.PlayCounter-Skip^2)^5 / 1.01^((DateDiff("d", Song.LastPlayed, Now)+1)/(Song.PlayCounter+1)))
but when i change it to this, i get an error:

Code: Select all

Points = Int(100 * (Song.PlayCounter-Skip^2)^5 / 1.01^((2*DateDiff("d", Song.LastPlayed, Now)+1)/(Song.PlayCounter+1)))
The error is:
Error #6 - Laufzeitfehler in Microsoft VBScript
Überlauf
File: "...\AutoRateAccStarter.vbs",Line: 711, Column:0
I don't know if it is the regular Linenumber, but it's the linenumber of the formula!!
and then a second error, again with "Überlauf".
Image
Big_Berny
Posts: 1784
Joined: Mon Nov 28, 2005 11:55 am
Location: Switzerland
Contact:

Post by Big_Berny »

Maybe the number is really to big. Because if you have listened to your song a long while ago you can get numbers like 1.01^1000. Have you tried "0.5*" instead of "2*" to see if this could be the problem? Bye the way: This 1.01*1000 has almost no effect to the formula! I only added it to prevent bad rating predictions if you have very low PlayCounters (because then a lot of songs get the same points).

Big_Berny
Image
Scripts in use: Genre Finder / Last.fm DJ / Magic Nodes / AutoRateAccurate / Last.FM Node
Skins in use: ZuneSkin SP / Eclipse SP
AutoRateAccurate 3.0.0 (New) - Rates all your songs in less than 5 seconds!
About me: icoaching - internet | marketing | design
Post Reply