Page 1 of 43

Auto Rating of Songs & Radio Announcer v5.02 [Script]

Posted: Sat Apr 08, 2006 7:34 pm
by DiddeLeeDoo
Install v5.02
Install Auto Rate Songs & Radio Announcer Open zip, and just double click the install file.

Input from Matt, for Vista installation.
On Vista, the extra security does not allow you to simply double click the vbs file to install. Here are the steps to install:

- close MediaMonkey
- Start > Programs > Accessories
- Right click Command Prompt and select Run as Administrator
- cd to the directory with the install
- run "cscript INSTALLNAME.vbs"
- Script will be installed. Start MediaMonkey

Otherwise you get a "Permission denied" error message.
Thank you Matt.

Install v4.12
Install Auto Rate Songs & Radio Announcer Open zip, and just double click the install file.
Version 4.12 use the old model. It will receive the updates in v5.01 eventually.

Script files:
Program Files\MediaMonkey\Scripts\RadioAnnouncer.vbs
Program Files\MediaMonkey\Scripts\Auto\AutoRateSongs.vbs
Program Files\MediaMonkey\Scripts\Auto\AutoRateSongsOptionSheet.vbs

Ini file sections:
My Documents\My Music\MediaMonkey\MediaMonkey.ini

Old script for Rating 'catch-up' use ... &start=284

Changes in version 5.0
  • A lot of attention is given to make sure it works in all sorts of situations, and configurations. Hopefully that part is nailed well in this version.
  • Gone from 'real time' to 'player time', which allow rating of first ever song played after restarting of MediaMonkey, and also the last one in an ending play list.
  • A song is considered played when MediaMonkey consider it played, AND the player time position is after 'Skip Monitor Percentage'
  • Songs rated lower than 'Skip at first play' rate will get a 'slow recovery' rating by being upgraded to closest whole star up.
This # of minutes part can be tweaked, by going to the AutoRateSongsOptionSheet.vbs and change the values in the very top of the script.

Based on a co-operation with fellow Monkeys, this turned out to be the model for rating.

Here's a nice link for Voices
This script requires SAPI5 to work with the Radio Announcer.


Skip monitor If skipped within set period, the song loose half a star ratings
Start after X seconds in player time. This allow you a period to sample song. No rating consideration will be done at all if the song is skipped within these seconds.
Stop at XX percent of the song in player time. This is due to an end of skip period is needed, and the basic idea is also that if you've put up with most of the song, it's not that bad.

Ignore < XX second songs is there to do nothing with tiny sound clips, interludes and stuff like that.

Ignore Mood/Occation songs is there to allow people who have special mood/occation files to be left untouched.

Time Stamp to Custom2 This write a Time Stamp formatted like "DayOfWeek TimeOfDay Season" only when a song receive a Rating Upgrade. Basic idea is to make it easy to find favorites in these time segments.
Northern Hemisphere is there to get the seasons right in above time stamp. If Southern, do not have this one ticked.

Do not post a modified copy or copy of the AutoRateSongs script anywhere. Modification should be posted in this thread only, and only the part that is modified.

Posted: Sat Apr 08, 2006 9:25 pm
by DiddeLeeDoo
Situation, you do not have a single song rated and set everything to 4 stars just to get started.

Whenever you hear something that you do not like much, reduce the rating based on the tolerance for the song.

It is a script meant for when MM is in 'Radio Mode' using some Auto DJ script... would need easy accesss Enable/Disable so it do not rate when you sample an album. (If you sample an album, you can easely repair rating if you forgot to Disable the AutoRate Script)

Posted: Sat Apr 08, 2006 11:03 pm
by Teknojnky
I requested a similar script awhile back, would love to see something get implemented.

I set my ratings to 2.5 by default (anything unrated I set at 2.5), then manually set them as they play when i have time.

I would love for it to auto reduce rating on skips.

Also update the 'last played time' while not incrementing play counts would be cool too.

Posted: Sun Apr 09, 2006 12:03 am
by DiddeLeeDoo
Another little argument for this AutoRate stuff maybe;

You rate a song as 5 stars because you love it. As time goes by, you've heard it enough already, so an alternative to original "seconds played" could be;

If skipped, then reduce rating by 1/2 star.

Posted: Sun Apr 09, 2006 12:21 am
by DiddeLeeDoo
I just discovered psyxonova's Played Percent script

May be possible to tweak this script a bit to do ratings... :)

Edit - Added:
Installed, and I had to add a Number field "PlayPercentage" to in the table "Played" to make it work.

Posted: Sun Apr 09, 2006 1:00 am
by Teknojnky
I think my original idea was to increase the rating per play count, and decrease it by skip.

Originally I considered using a custom field to keep track of how many skips vs full plays etc.

Depending on the age and play count of your library, you could do something like:

Every skip - .25, every full play +.1

Store that in a custom field, every play or skip would update the library rating as needed per increment.

To flesh out an example,

A track with a base rating of 2.5 and no skips/plays.
Play it once, the custom field gets +.1, no change to base rating.
Play it 5 times, the custom rating is up to .5, this increments the base rating by .5 to 3 stars.

Say you skip the track once, that drops it down to .25, no change to current rating @ 3 stars.

Skip a 2nd time and it drops back down to zero and decreases the rating down to base 2.5 stars.

Skip 2 more times, it drops the custom field to -.5 which drops the rating down to 2 stars.

and so on.

Using your idea of time based skipping, you could increase/decrease the change to the custom field which would speed up or slow down how quickly the custom field changes which would update the library rating.

Anyway, I support the concept of 'auto-rating' as long its intelligently and flexibly implemented, and of course easy to turn off and on for those time when you don't want it changing things.

Posted: Sun Apr 09, 2006 1:10 am
by DiddeLeeDoo
Teknojnky, I'm impressed with your BluePrint!

That would make it userfriendly for the masses, since it is quite gentle in its approach of rating songs. After all, rating is time based. Whatever was loved in 2001 may not be something you want to listen to today, so Rating is a living thing, and your BluePrint here allow for that in a very elegant way.

MediaMonkey is for those who have large collections, and doing manual rating is practially impossible, as it will forever be a 'should do' thing.

Posted: Sun Apr 09, 2006 5:57 am
by rovingcowboy
just yesturday i was wondering also if there was a way to get the rateings adjusted by the number of times played.

i thought if you did it something more along the lines of

play count after a week of playing would be set like below.

from 1 to 50 would equal 2 stars.

from 51 to 100 would equal 4 stars.

and anything greater then 101 would be 5 stars.

then have it rest all playcounts for the next week.

that way monkey would be more likely to play all the songs
as if you make it rate songs by play count and only play the
higer rated ones then you would mis some good songs that might
be a playcount of 2 that you like but monkey would not play.

so resetting the count to zero would fix that.

monkey already plays songs twice in a row sometimes. for some reason
and some times it does not play the songs you put in the lib. last year while
it plays the new ones. but it might play the older ones the next week,

that is what i am finding it will do and i play it 24 / 7 now . some days i don't hear older songs and some days i don't here newer songs.

it seems to go in a week cycle. but they all get played now.
only if i clear all the playcounts back
to zero it plays a mix of old added dates with new added dates until the
play count gets up on the songs then it starts going by the play counts more and more.

so making a auto rateing script would also have to make it randomize the added dates in a different way as to really mix up the songs more.

maybe by adding the ratings in to the list to choose which song will be played. so it would look at the added date , the play count, and the rateing for the songs to pick which one at random.

maybe like add 7 to every choice it plays then picking every 3rd song by the added date, then picking the 20'th song by the rateing and the play count minus 3.

that i think would really give you a more random choice and stop the or slow down the double playing of songs.?

any one else think something like that?


Posted: Sun Apr 09, 2006 7:21 am
by DiddeLeeDoo
I'm just playing. Would this do the trick ?


Posted: Sun Apr 09, 2006 1:14 pm
by Teknojnky
That would be cool, I personally would double plays and skips (or make it half star increments) so as not to change the rating too quickly.

Posted: Sun Apr 09, 2006 1:33 pm
by agentsmart
yes that would be great and would work well with the weekly top of the charts list that cowboy is trying to get working only he can not program but it looks like he is close to having what he wanted with a code from steegy, but something like you just did would make sure of the weekly chart topper list he wants would work.

and i wouldn't mind this either. 8)

Posted: Sun Apr 09, 2006 5:47 pm
by DiddeLeeDoo
I thought maybe a 'do not start auto rating before the song have been in the library for X days' would maybe prevent miss-ratings due to sampling of new albums, and I agree that half stars would do.

Plus maybe a roof and a floor for what the auto-rating is allowed to do.

Say you want the auto-rating only to be allowed to set a max of 4.5 stars, and then you know that any 5 star is your definite personal choices, and 4.5 stars have become 4.5 stars because you just play them a lot over a short period of time.

Posted: Sun Apr 09, 2006 6:25 pm
by Big_Berny
And a song should also receive a bonus increase if you doubleclick on it (if you chose it by yourself).

Posted: Sun Apr 09, 2006 6:42 pm
by DiddeLeeDoo
I'll just do some sketching.

'To avoid auto-rating of fresh meat.
Variable = AutoRatingAvoidFreshDays(1)
End program if Songs.ID excist in "SELECT Songs.ID FROM Songs WHERE Songs.DateAdded > Now() - " & AutoRatingAvoidFreshDays

'If Reach Upgrade status - avoid over-rating a song.

Variable = AutoRatingRoof (4.5)
AutoRatingRoof = AutoRatingRoof * 10
End program if Songs.Rating => AutoRatingRoof

'If Skipped - avoid under-rating a song
Variable = AutoRatingFloor (0.5)
AutoRatingFloor = AutoRatingFloor * 10
End program if Songs.Rating =< AutoRatingFloor

'To up the Rating based of #of plays over a period of time.
Variable = AutoRateNoOfPlays(5)
Variable = AutoRateUpgradePeriod(1)
Variable = AutoRatePlayingSongID

SQL=Finds how many times a song have been played over the last 24 hours
SELECT First(Played.IdSong) AS ARSongID, Count(Played.IdSong) AS ARNoOfPlays FROM Played WHERE ((([PlayDate]>Now()-AutoRateUpgradePeriod)=True)) GROUP BY Played.IdSong HAVING (((Count(Played.IdSong))>AutoRateNoOfPlays) AND ((Played.IdSong)=AutoRatePlayingSongID));

If AutoRateNoOfPlays in Table.Played over the Last AutoRateUpgradePeriod day => AutoRateNoOfPlays then Songs.Rating = Songs.Rating + 10

'To down the Rating based of skips.
Variable = AutoRateSkipped(1)
Variable = AutoRateSkippedPeriod(seconds)
Variable = StartTimeOfSongPlaying

(May have to be OnError/OnExit)
If SongPlaying = StillPlaying at AutoRateSkippedPeriod then exit program
Songs.Rating = Songs.Rating - 10
End If

Posted: Sun Apr 09, 2006 6:51 pm
by DiddeLeeDoo
Big_Berny wrote:a song should also receive a bonus increase if you doubleclick
Wonder how the program would be able to register this double-click. Where do you think the double-click should be done. In the NowPlaying?
I was thinking if you're there already, you may as well right click the song, and use that easy-to-use rating you get when you right click a song.

This AutoRating stuff is really for when you do not focus on MediaMonkey. You just listen to music and do other stuff... However, you may hate a song that comes up, so you skip it because you're sick of it already... :) Skipping songs is something you can do in many ways, by remote control/web control/FoxyTunes for Firefox and so on.