zoukankan      html  css  js  c++  java
  • 歌曲播放的随机算法的探讨

    对于音乐播放,最流行的有顺序播放顺序循环播放随机播放单曲播放四种选项。

    首先我以个人观点点评下目前常用的四种功能:

    顺序播放:是一种很鸡肋的功能,为什么各大厂商都要做!感觉一般人都不会用的,播放一遍就停了,还不如做一个定时/定数停止播放的功能;

    顺序循环播放:使用体验很不错,但是有个比较糟糕的问题是,让两首不相关的作品间产生了联系,导致了一首歌放完了,就已经知道了下首歌是什么了。或者当在其他地方听到了一首歌完了,脑中便浮现了自己音乐列表的下首歌了;

    单曲播放:这个选项没什么可说的,动听歌曲洗脑循环;

    随机播放:随机本身是一个好东西,但是由于随机算法不好的地方,导致了伪随机的问题,影响听歌体验;

    伪随机的有如下两点明显的坏处:

    1、老是抽取到一首歌,导致对一首歌产生听觉疲劳;

    2、老是抽取不到某首动听的歌,降低对音乐的美好体验;

    百度随心听(2016年左右的版本)的随机播放为例子,同样和网易云音乐是基于大数据的音乐推荐应用。后者明显用户反馈较好(基于附近朋友圈的调查,可能样本偏局部)。其中我觉得百度的产品最大的缺点就是,他的随机播放可能基于用户的歌曲播放次数,一首歌听得越多,越容易出现在预定列表,这也是我放弃这个应用的原因。百度随心听很容易造成一首歌的听觉疲劳,而且推荐的新歌可能也由于算法原因不是很动听。网易云音乐加入了人为过滤的数据集,相比明显显得智能许多。其中我认为最重要的便是随机播放的伪随机在作祟。

    进而我觉得,可以提出这样一种随机顺序播放模式:

    1、以列表歌单数据为样本,对数据做一次随机排序;

    2、然后执行顺序播放;

    3、顺序播放到最后一首歌的时候,重新进行随机排序(由于数据集太大,排序的耗时对听觉体验这里不讨论);

    4、重新再循环2步骤执行;

    5、如果新加入一首歌曲,将随机插入到列表剩下未播放歌曲的随机位置;

  • 相关阅读:
    LeetCode刷题记录(1)
    TypeScript实现设计模式——观察者模式
    TypeScript实现设计模式——策略模式
    TypeScript实现设计模式——工厂模式
    TypeScript实现设计模式——单例模式
    nodejs爬虫--抓取CSDN某用户全部文章
    JavaScript实现常见的数据结构
    利用PicGo、GitHub和jsDelivr搭建图床
    2019年终总结
    Git学习记录(一)
  • 原文地址:https://www.cnblogs.com/qvbrgw/p/6696970.html
Copyright © 2011-2022 走看看