Playlist random improvements
I now keep track of the last 15 songs played. If a song with the same (artist, title) as one of the songs in the list attempts to play, we skip it. Songs with a negative score have a (20 * score) + 100 per cent chance of playing. When score is -5, the song should never play. I used to try to find a song 5 times before giving up and playing the song with the current id. I have upped the threshold to 15.
This commit is contained in:
parent
43eab40b01
commit
c35f210369
|
@ -73,6 +73,7 @@ class Library(collection.Collection):
|
||||||
class Playlist(collection.Collection):
|
class Playlist(collection.Collection):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
collection.Collection.__init__(self, "playlist.dl_tree")
|
collection.Collection.__init__(self, "playlist.dl_tree")
|
||||||
|
self.last_tracks = []
|
||||||
|
|
||||||
def next_id(self, last_id):
|
def next_id(self, last_id):
|
||||||
return_next = False
|
return_next = False
|
||||||
|
@ -94,13 +95,26 @@ class Playlist(collection.Collection):
|
||||||
if self.size == 0:
|
if self.size == 0:
|
||||||
return
|
return
|
||||||
getattr = libsaria.collection.lib_get_attr
|
getattr = libsaria.collection.lib_get_attr
|
||||||
for i in xrange(5):
|
last = self.last_tracks
|
||||||
|
for i in xrange(15):
|
||||||
id = self.get_rand_candidate()
|
id = self.get_rand_candidate()
|
||||||
if getattr(id, "score") >= 0:
|
artist = getattr(id, "artist")
|
||||||
return id
|
album = getattr(id, "album")
|
||||||
play_anyway = rand.randint(0, 1)
|
title = getattr(id, "title")
|
||||||
if play_anyway == 1:
|
if (artist, title) in last:
|
||||||
return id
|
print "Skipping %s by %s because it has played recently." % (title, artist)
|
||||||
|
continue
|
||||||
|
score = getattr(id, "score")
|
||||||
|
if score < 0:
|
||||||
|
play_anyway = rand.randint(0, 100)
|
||||||
|
if play_anyway < ((20 * score) + 100):
|
||||||
|
print "Skipping %s by %s because I don't think you want to hear it." % (title, artist)
|
||||||
|
continue
|
||||||
|
last.append((artist, title))
|
||||||
|
if len(last) > 15:
|
||||||
|
last.pop(0)
|
||||||
|
print "Picking a song took %s iterations" % i
|
||||||
|
return id
|
||||||
return id
|
return id
|
||||||
|
|
||||||
def get_rand_candidate(self):
|
def get_rand_candidate(self):
|
||||||
|
|
Loading…
Reference in New Issue