FS#1042 - Weighted Playlists / Smart Weighted Playlists

Attached to Project: Rockbox
Opened by Anonymous Submitter - Friday, 07 March 2003, 18:51 GMT
Last edited by Marc Guay (Marc_Guay) - Friday, 30 January 2009, 17:20 GMT
Task Type Feature Requests
Category Playlists
Status Closed
Assigned To No-one
Operating System All players
Severity Low
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No


It would be nice if there was an optional playlist file format that
could include a 'weight' rating for each song... say 1-10 (or maybe
1-5 if 10 is too many).

When a playlist starts in shuffle mode ... the weight helps to
determine if the song will play on this shuffle mode session or not
... so basically using a random generator ... a '10' would always
play ... a 9 would have a 90% chance of playing, 8 would have
80% chance of playing etc.

So some songs you don't like to hear as often won't always get
thrown into the mix and shuffled and the weight determines how
often (on average since it will probably be a random generator that
chooses to play or not).

Part 2 --- Smart Weighted Playlist.

I saw this feature on the Empeg Car Player...
My details are below. But in a nutshell, the player could pay
attention to when you skip songs in a playlist and change the
weight if you tend to skip the song a lot. Or vise-versa (you have
a song with a low number, but suddenly tend to start listenting to it
a lot)

I think this would be a great feature ... because basically a playlist
could start to adapt itself to mimic the habits of the listener (user)
and it would result in a better listening experience.

The stats for this (as will as the weighted playlist about) could
either be stored as part of the playlist file ... or stored somewhere
else too i suppose if the playlist format is a limitation.

Here is my details of how i think it could technically work....

When a playlist is created the user could have the option to make
it a Smart Playlist .... basically everysong could start out with a
rating of 10 (or 5 if you go with 1-5). In addition the weight. The
playlist would hold the average amount of time (in percentage of
song) that the user actually listens to the song. Initially this
average sound start out at 100% (1.00). The average consists of
the last 10 times the user heard the song. So initially each value
for each item would reflect that the user listened to the entire song
the last 10 times.

So then when you listen to the playlist (shuffle mode) and you
finish a song (either by coming to the end or hitting the skip to go
to the next song) it calculates what % of the song you listened to.
Then it adjustes the average based on the old average.

Example: newAverage = ((oldAverage * 9) + thisPercent)/10

Then it would change the weight based on the newAverage score.

So for example if you were using a 1-10 based scale and the the
orignal average was 100% but the user listened to only 10% of the
song. newAverage = ((100 * 9) + 10)/10. Which is 91% As the
new Average. Then 91% if you convert to the 1-10 scale ... 91%
is closest to 9 (9 being 90% of 10). So the weight would now be
9. (If you were using a 1-5 weight scale ... 4 is 80% of 5, so 91%
would be closest to 5, so it would keep 5 this time around).

So going on more step ... if the user did the same thing when this
particular song came up and only listened to 10% of it .... then
newAvarege = ((91.00 * 9) + 10)/10. Which is 82.9% resulting in a
weight of 8 now ... so you can see that the weight can quickly
start to adjust itself as the listener uses the list.

This task depends upon

Closed by  Bj√∂rn Stenberg (zagor)
Friday, 30 January 2009, 17:20 GMT
Reason for closing:  Invalid
Additional comments about closing:  Closing all feature requests.
Comment by N Sanghvi (rockboxrocks) - Friday, 11 July 2003, 16:33 GMT

This sounds like an awesome feature if it is possible!
Comment by Ryan (Gordonx42) - Friday, 02 February 2007, 23:31 GMT
Smart Weighted Playlist would the coolest thing ever. I'd drop the apple software in a second.
Comment by Scott Scriven (ToyKeeper) - Tuesday, 29 January 2008, 23:48 GMT
FWIW, I've implemented a similar feature in a different music player. It works pretty well, though I find that the weights need to be adjusted a bit to produce good results.

With no curve applied, a song rated 7/10 would have a 70% chance of being played when encountered in the playlist, and a song rated 2/10 would have a 20% chance. The better song is 3.5 times as likely to be played. However, using rating**3, the probabilities are 34% and 0.8%, making the better song 43 times as likely to be played. This effectively amplifies the difference between a good song and a bad song.

This feature (and some ideas of how to implement it) is already logged in another bug:

This is actually how the music player on my desktop works. It's simple and effective. The only drawback I've found is that it only works if you like random play order. The better songs get played more often, but the feature must be turned off if the user wants songs to play in any particular order.