为什么随机播放的音乐,有时总是在播?
一个产品小白对于网易云音乐随机播放的一些想法和思考,资料和相关理论都是通过阅读和自己分析得出的结论,如有不妥请指正。
 
1. 现状
  不知道大家有没有这样一种感觉:在使用音乐软件进行随机播放的时候,总是不能播放到心仪的音乐,而且很多歌曲会重复出现。在产生这种困惑之后我同时产生了对随机播放算法和问题的好奇。
  于是,我在百度中输入“音乐随机播放”关键词后,在知乎、百度知道、豆瓣都能看到:“没有听到的歌一直没听到,还有一些歌一直重复播”、“好像是在已加载的列表中随机”、“实际结果其实给人的感觉并不随机。某首歌从不出现,和某首歌反复出现,概率其实都很高”、“大部分是根据你听的次数最多的几首歌优先来放,越来越频繁,听的次数就越来越多”等反馈。
2. 用户需求雨中的故事
你怎么这么好看
  用户使用随机播放,往往出于以下原因:一是想听到列表里不常听的歌;二是不想或很难作出选择,希望随机播放的功能能够帮助他们选择(懒惰心理)。
  但是根据网络上用户的反映和本人的使用体验来看,随机播放功能主要解决第二类用户的需求,对于第一类用户的需求并没有很重视,因此才会出现上面提到的网友的吐槽。
3. 小结
  观察后发现,QQ音乐、虾米和其他播放软件的随机播放也有此类问题,而且问题从15-19年都有反映,说明此类问题并没有得到很好的解决。
1. 随机播放模式的算法
  一般音乐播放器的随机模式分为两种:
  1)播放当前歌曲时才随机生成下一首,即完全随机(称为Random算法):为了避免某些歌曲经常重复播放或很难被播放到,并非是盲目的完全随机下一首,而是需要分析用户的播放历史,需要比较好的算法进行支撑,最终始于随机却超脱随机。
  2)将当前的list打乱顺序,然后依次播放,也就是大家所说的伪随机(称为Shuffle算法):这一种是目前比较流行的随机模式,完美解决某些歌曲很难被播放到的情况出现,但是却有以下劣势:该模式下,上下曲的顺序是固定的;一个随机播放的list的歌曲全部播放完毕后会重新生成另一个list,但是相邻的list之间容易出现用户所感知的“重复”播放。我的中国心伴奏
  根据问答资料整理,大部分音乐播放软件的随机算法是“洗牌算法(shuffle)”。
2. 什么是“洗牌算法”
  简单来说就是随机问题,一个从1到n的序列,随机打乱,保证每个数出现在任意一个位置的概率相同。
  运用到音乐软件来说,就是系统在歌单内随机抽选歌曲进行随机排列,形成一个新的歌单再进行顺序播放,这就是我们所说的随机播放。
  那么洗牌算法中进行排列的总体是什么呢?
  在这里我想作一个简单猜测:根据用户反映情况和自身的体验来看,我认为随机播放的总
体有4个,分别是全部歌曲(a)、最近播放(b)、按播放量排列的歌曲(c)和喜欢的歌曲(d),随机播放时从中抽取的比例为n1%,n2%,n3%,n4%(n1%+n2%+n3%+n4%=1),那么随机歌单的歌曲总数S=a*n1%+b*n2%+c*n3%+d*n4%。
  搞清楚了随机播放的原理后,我们可以尝试分析一下随机播放遇到的问题以及解决方法了。
三、问题反馈及分析
1. 听不到自己喜欢的歌忘了我是谁
  首先,我将这个问题分为两个场景:
一是用户想听到自己喜欢的歌单里的歌曲,是用户真正的听歌喜好/习惯。那么这个时候随机播放就是要将用户喜爱的这类歌曲进行选择并排列。
陈道明太太近照曝光>别碰我的女人歌词二是用户现在没有特定的喜好方向,希望听到一些和平常不一样的歌曲,希望系统帮他们
做出选择。这个时候随机播放要做的,就是将用户歌单内的全部歌曲进行随机筛选进行排序。
  但是这里就会出现另一个问题。上文提到的随机播放算法的假设中,有四个总体,其中最近播放、播放量排序歌单和喜欢的歌曲都可以归为用户常听的歌曲类别中,如果系统依旧像往常一样运用普通的随机算法来生成随机歌单的话,就会出现随机播放的歌曲是用户最常听的歌曲的情况,这显然不符合用户的需求。
  那么我们可以将这两个场景区分开来讨论解决方案:
第一个场景可以参考网易云音乐里的“心动模式”,从用户喜欢的歌曲里抽选歌曲,并随机匹配与用户歌曲风格类似的歌曲进行播放。但是心动模式需要在喜欢的歌曲中才能触发,在普通歌单的播放模式中并没有此选择。为此可以将该模式增加至普通播放模式中,作为一种随机播放模式使用。