百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

为什么随机播放的音乐,有时总是在播?

wptr33 2025-02-27 16:56 13 浏览

一个产品小白对于网易云音乐随机播放的一些想法和思考,资料和相关理论都是通过阅读和自己分析得出的结论,如有不妥请指正。

一、背景

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. 听不到自己喜欢的歌

首先,我将这个问题分为两个场景:

  • 一是用户想听到自己喜欢的歌单里的歌曲,是用户真正的听歌喜好/习惯。那么这个时候随机播放就是要将用户喜爱的这类歌曲进行选择并排列。
  • 二是用户现在没有特定的喜好方向,希望听到一些和平常不一样的歌曲,希望系统帮他们做出选择。这个时候随机播放要做的,就是将用户歌单内的全部歌曲进行随机筛选进行排序。

但是这里就会出现另一个问题。上文提到的随机播放算法的假设中,有四个总体,其中最近播放、播放量排序歌单和喜欢的歌曲都可以归为用户常听的歌曲类别中,如果系统依旧像往常一样运用普通的随机算法来生成随机歌单的话,就会出现随机播放的歌曲是用户最常听的歌曲的情况,这显然不符合用户的需求。

那么我们可以将这两个场景区分开来讨论解决方案:

  • 第一个场景可以参考网易云音乐里的“心动模式”,从用户喜欢的歌曲里抽选歌曲,并随机匹配与用户歌曲风格类似的歌曲进行播放。但是心动模式需要在喜欢的歌曲中才能触发,在普通歌单的播放模式中并没有此选择。为此可以将该模式增加至普通播放模式中,作为一种随机播放模式使用
  • 第二个场景则可以在现有的随机播放的条件下进行优化,例如适当降低播放量排序歌单和最近播放歌曲的选中比例,增加新增歌曲和不常听歌曲的选中几率;对用户听歌时长小于30s的歌曲进行剔除,下一次随机播放排序时不再出现此歌曲。

2. 有的歌曲重复出现,有的歌曲几乎不出现

为什么有的歌曲会重复出现?

是因为洗牌算法中生成的序列是随机的,在用户播放完一个随机播放的歌单后,系统会再次将虽有歌曲进行随机排序,重新生成另一个随机播放歌单,那么这两个歌单之间必然会有歌曲重复出现。

那么我们可以通过降低已听过的歌曲被选中的几率,或者在选中同一首歌曲的时候重新进行洗牌排序来降低此类问题出现的频率。

而有的歌曲几乎不出现,就是上一个问题所探讨的了。随机播放的歌曲选定的总体是固定的,而且偏向用户常听歌曲,因此对于新增歌曲和不常听歌曲被选中的比率就非常小了。

3. 随机播放列表中上一首和下一首歌曲固定

因为洗牌算法下随机播放列表是一种随机排列后顺序播放的列表,所以列表中的顺序是固定的。关于这个问题用户并没有很大的意见,甚至有的很赞同这种模式:“在随机模式中也可以通过上下首切换找到喜欢的歌曲”。

这可以说是洗牌算法的其中一个优势,但是却没有被很好的利用起来。

网易云音乐里使用随机播放模式的时候,无法查看随机播放的歌单。用户只能在播放页面上下切换歌曲,而不能随机选择,而有的时候需要切换多次才会听到想听的音乐。

如果在不改变和优化算法的情况下,将随机播放列表可视化,也是另一个解决思路。用户可以在列表内查看歌曲并随意选择,还能对列表进行自定义,例如对随机播放列表内的歌曲进行删除、调序等操作,让随机播放的歌曲能够更贴合用户实际的需求。

四、可行性分析

分析到这里其实我有点疑惑,为什么问题反馈较多,而且很多程序员也给出了自己的想法和解决方案,但是市面上的音乐软件却迟迟没有动静呢。

1. 影响的用户范围少

各音乐软件在设计过程中必然做了很多的市场及用户调查,而且在产品各功能的设计过程中会考虑到用户的各层面的心理需求,设计解决的也是最大范围的用户的需求。而从该问题的反馈数量来看,相较于网易云音乐的用户数(据网易数据显示,2019Q2网易云音乐用户破8亿)确实微不足道。

而且对于有着“希望能听到平常不常听到的歌曲”的需求的用户,网易云也有着“每日推荐”这类功能的解决方案。因此不需要通过优化随机播放模式的算法来达到满足用户需求的目的。

2. 产生的效果不明显

根据KANO用户需求理论,用户需求分为:基本型、期望型、兴奋型、无差异型和反向型需求。对于随机播放功能而言,是音乐播放软件的基本型需求。不提供此需求,用户的满意度会大幅度降低,但优化此需求,用户满意度也不会得到显著的提升。

基于此,音乐播放软件也无需投入大量的人力和时间来优化此类功能。

五、总结

随机播放功能实质上是机器计算的结果,随着AI的广泛应用和推广,结合AI的自我学习功能和快速计算能力。我相信在以后的计算和推荐功能中会有更贴合用户需求的设计出现,随机播放也会变得更”懂“我们。

作者:HEmEiYing,应届毕业生,产品小白一个,自学入门不久,欢迎批评指正~

本文由 @HEmEiYing 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...