歌曲播放的随机算法的探讨
对于音乐播放,最流行的有顺序播放,顺序循环播放,随机播放,单曲播放四种选项。
首先我以个人观点点评下目前常用的四种功能:
顺序播放:是一种很鸡肋的功能,为什么各大厂商都要做!感觉一般人都不会用的,播放一遍就停了,还不如做一个定时/定数停止播放的功能;
顺序循环播放:使用体验很不错,但是有个比较糟糕的问题是,让两首不相关的作品间产生了联系,导致了一首歌放完了,就已经知道了下首歌是什么了。或者当在其他地方听到了一首歌完了,脑中便浮现了自己音乐列表的下首歌了;
单曲播放:这个选项没什么可说的,动听歌曲洗脑循环;
随机播放:随机本身是一个好东西,但是由于随机算法不好的地方,导致了伪随机的问题,影响听歌体验;
伪随机的有如下两点明显的坏处:
1、老是抽取到一首歌,导致对一首歌产生听觉疲劳;
2、老是抽取不到某首动听的歌,降低对音乐的美好体验;
以百度随心听(2016年左右的版本)的随机播放为例子,同样和网易云音乐是基于大数据的音乐推荐应用。后者明显用户反馈较好(基于附近朋友圈的调查,可能样本偏局部)。其中我觉得百度的产品最大的缺点就是,他的随机播放可能基于用户的歌曲播放次数,一首歌听得越多,越容易出现在预定列表,这也是我放弃这个应用的原因。百度随心听很容易造成一首歌的听觉疲劳,而且推荐的新歌可能也由于算法原因不是很动听。网易云音乐加入了人为过滤的数据集,相比明显显得智能许多。其中我认为最重要的便是随机播放的伪随机在作祟。
进而我觉得,可以提出这样一种随机顺序播放模式:
1、以列表歌单数据为样本,对数据做一次随机排序;
2、然后执行顺序播放;
3、顺序播放到最后一首歌的时候,重新进行随机排序(由于数据集太大,排序的耗时对听觉体验这里不讨论);
4、重新再循环2步骤执行;
5、如果新加入一首歌曲,将随机插入到列表剩下未播放歌曲的随机位置;