INTERACT FORUM
More => Old Versions => JRiver Media Center 22 for Windows => Topic started by: djfalstaff on January 04, 2017, 12:44:11 pm
-
Is it possible to auto rate tracks so the track rating tags gets updated after a certain number of play counts?
For example,
0 to 2 plays - no stars
2 to 5 plays - one star
5 to 6 plays - two stars
7 to 8 plays - three stars
9 to 10 plays - four stars
> 10 plays - five stars
-
I have no clue. I'm guessing no reply means it's not possible.
-
It's not possible to auto-update the content of normal tags in this way, however you could create your own rating tag and make it a calculated expression based on your requirements. That is entirely possible.
-
the best currently possible way (IMO) to do it, is in a smartlist. every so often, just open and close the smartlist and the updates will take place.
-
Smartlists cannot write tags...?
If you want data fields to update you have to do it manually.
-
Mark's idea is the best IMHO. I just tested it and it works great. I made a new field called:
Rating (calculated)
I set it up as an Integer type with an Edit Type of Five Stars. Then I made it Calculated Data and used this expression:
IfElse(Compare([Number Plays],>=,3),5,
Compare([Number Plays],>=,2),4,
Compare([Number Plays],>=,1),3,
Compare([Number Plays],<,1),1
)
This is a very simple and naive mapping that makes 3 or greater plays equal to 5 stars, 2 plays equal 4 stars, 1 play equals 3 stars, and no plays is 1 star. Change the values as you'd like to get the mapping you want.
Good Luck.
Brian.
-
The calculated field seems like a solid idea.
I would like to translate that calculated back into the the standard field at some point, though.
Does anyone know of a tag writer program that let's you create updates based on some logic?
-
Simplest way is to just create a smartlist that shows the source and destination fields. Then you just CTRL-A to select the entire dataset and F2 to open a destination field for editing and you'd enter =[source field] (whatever the field is called) and it will copy every field from the source to the destination as long as all are selected.
-
Your suggestions actually gave me an idea and I'm hoping that you all wouldn't mind helping me by translating it into an expression.
I'm thinking of returning just a number instead of using stars.
The basis being this
IfElse(Compare([Number Plays],>=,10),100,
Compare([Number Plays],=,9),90,
Compare([Number Plays],=,8),80,
Compare([Number Plays],=,7),70,
Compare([Number Plays],=,6),60,
Compare([Number Plays],=,5),50,
Compare([Number Plays],=,4),40,
Compare([Number Plays],=,3),30,
Compare([Number Plays],=,2),20,
Compare([Number Plays],=,1),10,
Compare([Number Plays],<,1),0
)
Then adding some modifiers to the base number.
If the Artist is in a list of my favorite and most trusted artists (could I store a list of 30 or so somewhere?)then add + 20
If the genre contains the word Progressive or Metal + 10
If the Ratings field has 4 stars +5
If the Ratings field has 5 stars +10
If the track is in more than two playlists + 10
if the track is in more than three playlists + 20
if the track is in more than five playlists + 50
Thanks in advance!
-
Not sure about the playlists test, but the rest is doable. Just wrap multiple IfElse rules inside the math() rule, eg
math(IfElse(ruleset1) + IfElse(ruleset2) + IfElse(ruleset3))
http://wiki.jriver.com/index.php/Expression_Language
-
We've been discussing about automatic ratings lately on those threads, where you'll certainly find some ideas :
http://yabb.jriver.com/interact/index.php/topic,108605.msg752569.html (http://yabb.jriver.com/interact/index.php/topic,108605.msg752569.html)
http://yabb.jriver.com/interact/index.php/topic,108564.msg751975.html (http://yabb.jriver.com/interact/index.php/topic,108564.msg751975.html)
http://yabb.jriver.com/interact/index.php/topic,100596.msg697624.html#msg697624 (http://yabb.jriver.com/interact/index.php/topic,100596.msg697624.html#msg697624)
With those informations and the great help of other members, I've been able to automatically rates my albums with a formula based on both album's rating and album's number plays. If this may interest you I'll post some details here tonight.
-
I am interested. It makes me wish for a special section of the forum or wiki just for expression recipes.
-
Is it possible to auto rate tracks so the track rating tags gets updated after a certain number of play counts?
For example,
0 to 2 plays - no stars
2 to 5 plays - one star
5 to 6 plays - two stars
7 to 8 plays - three stars
9 to 10 plays - four stars
> 10 plays - five stars
As you're talking about tracks rating, what you're asking for can very easliy be done with search lists :
- In a category view, add a category.
- Then edit it and select "search list" as a type.
- "Add" an item and call it "*"
- In the "Rule" above select "Number played" then "Is less than" then "3"
- In the "Rule" above select "Number played" then "Is more than" then "0"
- Repeat for each conditions you need.
Et voilà ! :)
You'll have all your tracks sorted by "ratings" (see picture. I've been too lazy to do all rules)
-
It makes me wish for a special section of the forum or wiki just for expression recipes.
Yes ! This would be really great, I totally second you on that !
-
I am interested.
Automatic rating of an Album based on rates and number plays
Ferday, Mark_h, blgentry and few other users have been very helpful on this topic. They have done all the job, not me ;)
My initial wish was to generate a rating per album (and no per tracks as it is by default in MC). This rating would be an average of all tracks rated in this album (Sum of ratings / number of tracks).
Then I thought also that the number of time an album have been played should have an influence on the global rating of this album. This "Album number plays" is calculated this way : sum of Number plays of each tracks within an album / number of tracks of this album.
So my final formula for my Album_rating is : (Album_sum_rating+Album_sum_Number_plays)/Number_of_tracks
I personnaly prefer using "views" rather than "smartlists" but this works the same for both. I'll explain for "views".
1. Create a view, call it "Album Rating" (you could name it "Bob Dylan" too, it will work the same)
2. Then "Customize view"
3. "Set rule for file display"
4. Import /export
paste this :
[=save(0,var_number_of_tracks[album artist (auto)][album])1]=1 [=save(0,var_plays_sum[album artist (auto)][album])1]=1 [=save(0,var_points_sum[album artist (auto)][album])1]=1 [=save(0,var_album_plays[album artist (auto)][album])1]=1 [=save(0,var_album_points[album artist (auto)][album])1]=1 [=save(math(1+load(var_number_of_tracks[album artist (auto)][album])),var_number_of_tracks[album artist (auto)][album])1]=1 [=save(math(formatnumber([Number Plays, 0])+load(var_plays_sum[album artist (auto)][album])),var_plays_sum[album artist (auto)][album]),)1]=1 [=if(compare([rating],<,1), save([rating]+load(var_points_sum[album artist (auto)][album])),var_points_sum[album artist (auto)][album]), save(math(([rating] - 2)*3 + load(var_points_sum[album artist (auto)][album])), var_points_sum[album artist (auto)][album]))1]=1 [=save(math(load(var_plays_sum[album artist (auto)][album]) / load(var_number_of_tracks[album artist (auto)][album])),var_album_plays[album artist (auto)][album])1]=1 [=save(math(load(var_points_sum[album artist (auto)][album]) / load(var_number_of_tracks[album artist (auto)][album])),var_album_points[album artist (auto)][album])1]=1 [Media Type]=[Audio] ~sort=[Media Type],[Sequence],[Album Artist (auto)],[Album],[Disc #],[Track #],[Name] ~a
5. In "Tools>Options>Library and Folders>Manage Library Fields"
6. Add new field
7. Name it "AA_Album_Rating" (Still works with "Bob Dylan" too, but could be confusing. "AA_" is just to have custom fields on beginning of the list)
8. Check "Calculated data"
9. Paste this :
=FormatNumber(math((load(var_plays_sum[album artist (auto)][album])+load(var_points_sum[album artist (auto)][album])) / (load(var_number_of_tracks[album artist (auto)][album]))), 0)
Et voilà !
Now you can use your "AA_Album_Ratings" field in your view pane !
-
I'm trying to work this out and learn the system as I go along. I want the expression to be easy to read and manage.
In a smart list, I'm creating an expression field called "Auto Rating".
Inside that, I'm putting the following calculations.
First, I want a base Point amount from play counts saved in a global variable called basePoints.
UPDATED: based on feedback in the replies to be shorter
save(math([Number Plays] * 10, basePoints))
UPDATED: based on feedback, I going to handle Favorite Artists in the following way.
I created a new library field called "IsFavoriteArtist" that is an integer with 0 and 1 for the allowed values and it is set to write the value into the file.
save(if(isequal([IsFavoriteArtist], 1, 2), 50, 0),favoriteArtistBonus)
After that, I'll create a list of favorite genres
Should this be stored here or would it make more sense for this to be a library field?
save(
listbuild(1, ;,
Progressive,
Metal)
, favoriteGenres)
I need to take the favoriteGenre list and compare it against the Genre field.
If the Genre field contains the string from the list then apply the bonus.
I don't know how to do this.
save([something goes here], favoriteGenreBonus)
Then I want to store my ratings bonus
save(
IfElse(
Compare([Rating],>=,5),10,
Compare([[Rating],=,4),5,
Compare([Rating],<=,3),0
)
, ratingsBonus)
Then I want the playlist bonus (not sure how to do this)
When you look at the tags for a track, the Playlists tag lists all the manual playlists the track is in.
I'm just not sure on how you access this and get the count.
save([something goes here], playlistBonus)
Finally, I want to add them together and return the final point value
math(load(basePoints) + load(favoriteArtistBonus) + load(favoriteGenreBonus) + load(ratingsBonus) + load(playlistBonus))
Some examples
Journey - Don't Stop Believin' with a play count of 24,a rating of 5, and is in 6 manual playlists
100 + 20 + 0 + 10 + 50 = 180
Nightwish - Everdream with a play count of 4, a rating of 5, and a genre of Symphonic Metal
40 + 20 + 10 + 10 + 0 = 80
Rush - Limelight with a play count of 5, a rating of 5, and a genre of Progressive Rock
50 + 20 + 10 + 10 + 0 = 90
-
save(
IfElse(Compare([Number Plays],>=,10),100,
Compare([Number Plays],=,9),90,
Compare([Number Plays],=,8),80,
Compare([Number Plays],=,7),70,
Compare([Number Plays],=,6),60,
Compare([Number Plays],=,5),50,
Compare([Number Plays],=,4),40,
Compare([Number Plays],=,3),30,
Compare([Number Plays],=,2),20,
Compare([Number Plays],=,1),10,
Compare([Number Plays],<,1),0
)
, basePoints)
This could be simplified into :
save(math([Number Plays] * 10, basePoints))
-
I updated it with your suggestion.
-
I can see two ways to create your favoriteArtistBonus (or favoriteGenreBonus) :
One is by using a IfElse(compare... expression but this can be a little bit tedious to build and to maintain.
Another one is by creating a integer FavoriteArtist field with two values allowed (0/1). 0 is default. You tag it to 1 when it is your favorite Artist/genre
Then when you want to calculate your rating you can easily do that :
MyRating = Playcount*10 + trackrating + FavoriteArtist*10 + Favoritegenre*10
-
That makes sense for Favorite Artist.
The Favorite Genre would be too much of a pain.
People keep inventing new types of metal and I just don't feel like keeping up with that.
A fuzzy search against the keywords Metal and Progressive will give me what I want without having to upkeep it.
-
I updated my post to reflect the changes we talked about.
I just to figure out the Favorite Genre and Count of playlists to give it a try.
-
I'm trying to put it all together minus the playlist count but I get a syntax error and I'm not sure what I did wrong.
I save my variables so I can easily tweak them when I need to.
save(10 , genrePointValue)
save(5, fourStarValue)
save(10 , fiveStarValue)
save(50 , favArtistValue)
get my base points
save(math([Number Plays] * 10, basePoints))
Get the favorite artist bonus.
save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue)), 0),favoriteArtistBonus)
Get the ratings bonus
save(
IfElse(
Compare([Rating],>=,5),formatnumber(load(fiveStarValue)),
Compare([[Rating],=,4),formatnumber(load(fourStarValue)),
Compare([Rating],<=,3),0
)
, ratingsBonus)
use the formula to get the final value
math(formatnumber(load(basePoints)) + formatnumber(load(favoriteArtistBonus)) + formatnumber(load(favoriteGenreBonus)) + formatnumber(load(ratingsBonus)))
I get a syntax error and here's the expression as one snippet
save(10 , genrePointValue)
save(5, fourStarValue)
save(10 , fiveStarValue)
save(50 , favArtistValue)
save(math([Number Plays] * 10, basePoints))
save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue)), 0),favoriteArtistBonus)
save(
ifelse(isequal([Genre],Metal, 8), formatnumber(load(genrePointValue)),
isequal([Genre],Progressive, 8), formatnumber(load(genrePointValue)), 1, 0)
, favoriteGenreBonus)
save(
IfElse(
Compare([Rating],>=,5),formatnumber(load(fiveStarValue)),
Compare([[Rating],=,4),formatnumber(load(fourStarValue)),
Compare([Rating],<=,3),0
)
, ratingsBonus)
math(formatnumber(load(basePoints)) + formatnumber(load(favoriteArtistBonus)) + formatnumber(load(favoriteGenreBonus)) + formatnumber(load(ratingsBonus)))
-
I'm certainly not the best person to help you on that kind of thing. Variable and expression are still very new and very confusing to me ::) ::) ::)
...but, I believe there is a parenthesis error in this expression :
save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue)), 0),favoriteArtistBonus)
it should be :
save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue), 0)),favoriteArtistBonus)
instead. Not sure it will solve your problem though.
-
This is what I'm using for my calculation. I believe it's close enough to what you would like to achieve to allow you to adapt it to your needs.
I've added a line for 'genre' bonus. It add 1000 if genre = "Métal" (I'm not THAT crazy of metal ;D, even if I really like a LOT bands like Dream Theater, Haken, Leprous, Riverside, but it was for testing purpose).
[=save(0,var_number_of_tracks[album artist (auto)][album])1]=1
[=save(0,var_plays_sum[album artist (auto)][album])1]=1
[=save(0,var_points_sum[album artist (auto)][album])1]=1
[=save(0,var_album_plays[album artist (auto)][album])1]=1
[=save(0,var_album_points[album artist (auto)][album])1]=1
[=save(math(1+load(var_number_of_tracks[album artist (auto)][album])),var_number_of_tracks[album artist (auto)][album])1]=1
[=save(math(formatnumber([Number Plays, 0])+load(var_plays_sum[album artist (auto)][album])),var_plays_sum[album artist (auto)][album]),)1]=1
[=if(compare([rating],<,1), save([rating]+load(var_points_sum[album artist (auto)][album])),var_points_sum[album artist (auto)][album]), save(math(([rating] - 2)*3 + load(var_points_sum[album artist (auto)][album])), var_points_sum[album artist (auto)][album]))1]=1
[=if(isEqual([genre],Métal,1), save(math(load(var_points_sum[album artist (auto)][album]) + 1000),var_points_sum[album artist (auto)][album]), save(load(var_points_sum[album artist (auto)][album]), var_points_sum[album artist (auto)][album]))1]=1
[=save(math(load(var_plays_sum[album artist (auto)][album]) / load(var_number_of_tracks[album artist (auto)][album])),var_album_plays[album artist (auto)][album])1]=1
[=save(math(load(var_points_sum[album artist (auto)][album]) / load(var_number_of_tracks[album artist (auto)][album])),var_album_points[album artist (auto)][album])1]=1
[Media Type]=[Audio] ~sort=[Media Type],[Sequence],[Album Artist (auto)],[Album],[Disc #],[Track #],[Name] ~a
Number of plays is calculated by this line :
[=save(math(formatnumber([Number Plays, 0])+load(var_plays_sum[album artist (auto)][album])),var_plays_sum[album artist (auto)][album]),)1]=1
The rating bonus is calculated by this line :
[=if(compare([rating],<,1), save([rating]+load(var_points_sum[album artist (auto)][album])),var_points_sum[album artist (auto)][album]), save(math(([rating] - 2)*3 + load(var_points_sum[album artist (auto)][album])), var_points_sum[album artist (auto)][album]))1]=1
I consider that
- rating '0' mean I've not yet evaluated the song
- rating '1' is bad (malus value = -1)
- rating '2' is neutral (bonus value = 0)
- rating '3' is good (bonus value = 1)
- rating '4' is very good (bonus value = 2)
- rating '5' is exceptional (bonus value = 3)
Genre bonus is calculated by this line :
[=if(isEqual([genre],Métal,1), save(math(load(var_points_sum[album artist (auto)][album]) + 1000),var_points_sum[album artist (auto)][album]), save(load(var_points_sum[album artist (auto)][album]), var_points_sum[album artist (auto)][album]))1]=1
Then, I just need to create a field with this expression :
=FormatNumber(math((load(var_plays_sum[album artist (auto)][album])+load(var_points_sum[album artist (auto)][album])) / (load(var_number_of_tracks[album artist (auto)][album]))), 0)
Keep in mind that my initial purpose was to get a rating per album.
-
I have a simple a question.
Your global variables look like this.
[=save(0,var_number_of_tracks[album artist (auto)][album])1]=1
save(10 , genrePointValue)
Yours starts with "[=" and end with "]=1".
What effect does that have?
-
You need to use his format!
but you can declare and save multiple in one statement
Please read here for a better idea on the variables as used in MC
http://yabb.jriver.com/interact/index.php/topic,77826.msg528415.html#msg528415
-
I think I see the issue now but what does this missing syntax represent?
I'm trying to fully understand the syntax so I don't have to just copy the work of others.
[=
save(10 , genrePointValue)
save(5, fourStarValue)
save(10 , fiveStarValue)
save(50 , favArtistValue)
save(math([Number Plays] * 10, basePoints))
save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue)), 0),favoriteArtistBonus)
save(
ifelse(isequal([Genre],Metal, 8), formatnumber(load(genrePointValue)),
isequal([Genre],Progressive, 8), formatnumber(load(genrePointValue)), 1, 0)
, favoriteGenreBonus)
save(
IfElse(
Compare([Rating],>=,5),formatnumber(load(fiveStarValue)),
Compare([[Rating],=,4),formatnumber(load(fourStarValue)),
Compare([Rating],<=,3),0
)
, ratingsBonus)
1]=1
Is it initializing the variables?
Will the following code if appended to the previous output my formula or this this part missing something too?
math(formatnumber(load(basePoints)) + formatnumber(load(favoriteArtistBonus)) + formatnumber(load(favoriteGenreBonus)) + formatnumber(load(ratingsBonus)))
Also, can you put comments in your code? I didn't see any in the spec.
-
good question! honestly i've never really *truly* sorted the syntax out myself. i just refer to my notes which come from that linked thread, and go from there.
IMO it's best to save the variable at the most basic level possible and do calculations at load time if possible
-
I got a little further.
This seems to get parsed without error but it doesn't display anything but "..." instead of a number.
[=
save(10 , genrePointValue)
save(5, fourStarValue)
save(10 , fiveStarValue)
save(50 , favArtistValue)
save(math([Number Plays] * 10), basePoints)
save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue), 0)),favoriteArtistBonus)
save(
ifelse(isequal([Genre],Metal, 8), formatnumber(load(genrePointValue)),
isequal([Genre],Progressive, 8), formatnumber(load(genrePointValue)), 1, 0)
, favoriteGenreBonus)
save(
IfElse(
Compare([Rating],>=,5),formatnumber(load(fiveStarValue)),
Compare([[Rating],=,4),formatnumber(load(fourStarValue)),
Compare([Rating],<=,3),0
)
, ratingsBonus)
1]=1
=formatnumber(math(formatnumber(load(basePoints)) + formatnumber(load(favoriteArtistBonus)) +
formatnumber(load(favoriteGenreBonus)) + formatnumber(load(ratingsBonus))))
-
A few answers and suggestions:
I'm not great at developing these expressions. But my normal method is to use expression columns. They allow you to do edits a little faster than smartlist (or views) definitions. It's still not "fast", but it's a little quicker.
I tend to develop the expressions themselves in a text editor and then cut and paste. Again, this helps a little with speed and consistency.
Global variables are pretty unusual; as ferday said, I generally use a form that I've seen repeated in other posts and build on that form. That form being that you seem to need to build a variable twice for some reason. You generally see them done in pairs: One statement to initialize the variable and a second to populate it with a value. I think. As I said, I don't claim to have deep understanding of how it all works.
When you get "..." that generally seems to mean that your value is of the wrong type, or not displayable or something like that. I've had this behavior from time to time where it would produce normal looking output most of the time, but then give me "..." for some instances. I can't decide if it means "MC can't display this because it's too big", or "MC can't display this because it's not the right type", or something else.
As with most programming, when you run into unusual behavior, it's best to back off and start with the core code. Then add on piece by piece until it breaks. Then you normally will have found the code that has the problem in it.
I don't think MC's expression language supports comments. The Expression Language does some really neat stuff. But it's not a fully formed programming language. It's still VERY useful. It's just limited in some respects.
Good luck.
Brian.
-
I tend to develop the expressions themselves in a text editor and then cut and paste. Again, this helps a little with speed and consistency.
I do to. I quickly become confused when there's more than 2 parenthesis in my expression ;D
I'm using Notepad++ which is a great help (for highlighting parenthesis for instance).
I wish someone could take some time to add MC "language" characteristic into Notepad++. I believe it's possible and it would be a tremendous help to developp expressions.
-
Seek and you shall find
http://yabb.jriver.com/interact/index.php/topic,108016.msg749233.html#msg749233
-
If I hover over it the column, the tooltip has the right number value but it doesn't display otherwise.
Honestly, I'd be happier if it was broken instead of it taunting me by almost displaying.
-
I came up with a simple test to highlight the issue.
I made two expression columns
math(10 + 5 + 10 + 50 + 20)
This one display the number properly
save(10 , var1)
save(5, var2)
save(10 , var3)
save(50 , var4)
save(math(2 * 10), var5)
math(load(var1) + load(var2) + load(var3) + load(var4) + load(var5))
This one gives you the right number when you hover over it but it doesn't display.
-
You have to write it on 1 line :
=save(10 , var1) save(5, var2) save(10 , var3) save(50 , var4) save(math(2 * 10), var5) math(load(var1) + load(var2) + load(var3) + load(var4) + load(var5))
In fact, MC displayed exactly what you wrote, including the line break..
The expression column interpret litterally what you write in it.
This :
math(10 + 5 + 10 + 50 + 20)
will cause the same display problem.
-
So the "..." must mean "line break embedded", or "line too long" because it contains a line break. This is no doubt what I was seeing before. Interesting.
Brian.
-
So the "..." must mean "line break embedded", or "line too long" because it contains a line break. This is no doubt what I was seeing before. Interesting.
Brian.
I don't know. If you type this expression :
math(10 + 5 + 10 + 50 + 20)
You won't have any '...' (at least I don't have). Just an empty column and if you hover, you get the tooltip with the correct result.
I would say that the "..." is more likely a "invalid argument" thing or something similar.
-
This display the right number but the formatting is messed up. It display things like "[70]..."
I won't be able to sort properly until it outputs a number correctly.
=save(10 , genrePointValue) save(5, fourStarValue) save(10 , fiveStarValue) save(50 , favArtistValue) save(math([Number Plays] * 10), basePoints) save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue), 0)),favoriteArtistBonus) save( ifelse(isequal([Genre],Metal, 8), formatnumber(load(genrePointValue)), isequal([Genre],Progressive, 8), formatnumber(load(genrePointValue)), 1, 0) , favoriteGenreBonus) save( IfElse( Compare([Rating],>=,5),formatnumber(load(fiveStarValue)), Compare([[Rating],=,4),formatnumber(load(fourStarValue)), Compare([Rating],<=,3),0 ) , ratingsBonus) {math(formatnumber(load(basePoints)) + formatnumber(load(favoriteArtistBonus)) + formatnumber(load(favoriteGenreBonus)) + formatnumber(load(ratingsBonus)))]
-
I finally got it to display right but I just don't why it worked.
=[save(10 , genrePointValue) save(5, fourStarValue) save(10 , fiveStarValue) save(50 , favArtistValue) save(math([Number Plays] * 10), basePoints) save(if(isequal([IsFavoriteArtist], 1, 2), formatnumber(load(favArtistValue), 0)),favoriteArtistBonus) save( ifelse(isequal([Genre],Metal, 8), formatnumber(load(genrePointValue)), isequal([Genre],Progressive, 8), formatnumber(load(genrePointValue)), 1, 0) , favoriteGenreBonus) save( IfElse( Compare([Rating],>=,5),formatnumber(load(fiveStarValue)), Compare([[Rating],=,4),formatnumber(load(fourStarValue)), Compare([Rating],<=,3),0 ) , ratingsBonus) math(formatnumber(load(basePoints)) + formatnumber(load(favoriteArtistBonus)) + formatnumber(load(favoriteGenreBonus)) + formatnumber(load(ratingsBonus)))