我正在为办公室建立一个媒体播放器,到目前为止还不错,但我想添加一个投票系统(有点像Pandora竖起大拇指/拇指向下)
要构建播放列表,我目前正在使用以下代码,它会拉出最近未播放的100个随机曲目(我们确保所有曲目都有相同的播放次数),然后确保我们听不到10首歌曲中的同一位艺术家,并制作了50首歌曲的播放列表。
max_value = Items.select(fn.Max(Items.count_play)).scalar()
query = (Items
.select()
.where(Items.count_play < max_value, Items.count_skip_vote < 5)
.order_by(fn.Rand()).limit(100))
if query.count < 1:
max_value = max_value - 1
query = (Items
.select()
.where(Items.count_play < max_value, Items.count_skip_vote < 5)
.order_by(fn.Rand()).limit(100))
artistList = []
playList = []
for item in query:
if len(playList) is 50:
break
if item.artist not in artistList:
playList.append(item.path)
if len(artistList) < 10:
artistList.append(item.artist)
else:
artistList.pop(0)
artistList.append(item.artist)
for path in playList:
client.add(path.replace("/music/Library/",""))
我正在努力找出使用上/下投票的最佳方式。 我希望通过upvotes看到更少的内线投票。
我不是在直接代码之后,因为我对python非常好,更多的是我不能完全理解的逻辑(如果你觉得有必要改进我的代码,我就赢了'停止你:))
答案 0 :(得分:0)
最初给每个音轨赋予重量w,例如10 - 投票增加,减少它(但永远不会减少0)。然后在决定下一个要播放的曲目时: 计算所有权重的总和,生成一个介于0和此总数之间的随机数,并逐步通过0-49的轨道将它们加起来直到超过随机数。播放那曲目。
精确加权算法(例如,upvote / downvote改变多少w)当然会影响曲目(重新)出现的频率。不是苹果公司必须改变“随机”这个问题。他们早期的iPod随机播放,因为它可以随机播放相同的音轨两次(或者足够接近以便用户注意)所以他们不得不减少随机性,我认为这也意味着通过最近播放音轨的方式改变了音量 - 在这种情况下,在选择下一曲目时也将考虑自上次播放以来的时间。确保你能够覆盖所有人在这些情况下向所有人投票49(或者如果他们想要保持沉默的全部50个)。或许这就是你想要的......