一个困扰很久的无聊问题:播放器的随机播放到底是哪种随机?

2017-04-25 17:38:38 +08:00
 acros

有做播放器(不管移动端还是 PC 端)的同学么? 不知道是心理作用。从 Winamp , Foobar ,千千静听,到现在的酷狗、网易云、虾米,好像本地歌单随机播放时,各首歌被选中的概率不是平均的,有几首每次随机播放都会蹦出来。 我都养成了习惯,歌单随机播放几天后,就移除掉感觉播放概率特别大,已经听腻的那几首。

另外有个现象就是随机播放期间,选择返回上一首,再点选下一首,这个时候播放器的操作逻辑和文本编辑器的“ Redo ”逻辑一样的,并不会做随机动作。

4955 次点击
所在节点    问与答
11 条回复
hjc4869
2017-04-25 17:43:30 +08:00
我做 UWP 播放器。
大部分播放器的随机播放应该是 Shuffle 得到一个新的 list 。
具体代码如下

private static IEnumerable<T> Shuffle<T>(IEnumerable<T> source, Random rng)
{
var buffer = source.ToList();
for (int i = 0; i < buffer.Count; i++)
{
int j = rng.Next(i, buffer.Count);
yield return buffer[j];

buffer[j] = buffer[i];
}
}

一个元素出现在任意位置的概率应该是等同的。
acros
2017-04-25 17:57:05 +08:00
@hjc4869
看到这个,忽然觉得可能是缓存+个人习惯问题。
如果 shuffle 只在切换播放模式时才触发,而我开始听歌时第一首总是从当时比较喜欢的那首歌开始····
monsoon
2017-04-25 19:06:52 +08:00
https://labs.spotify.com/2014/02/28/how-to-shuffle-songs/
iTunes 也是类似的, Google Music 也许也是类似的或者更复杂的算法(比如说结合机器学习)。
如果楼主你经常用的播放器有这种问题,有可能是随机的算法没写好。
wadjj
2017-04-25 19:14:42 +08:00
不是数学上的随机,因为不能回到上一首,并且有一首歌连放三遍被消费者骂智障的风险。
billlee
2017-04-25 21:17:04 +08:00
Foobar 有两种模式,一种是 random 真随机,另一种是 shuffle, 即先把列表打乱得到一个新列表,然后按这个新列表的顺序播放。
YvesX
2017-04-25 22:39:50 +08:00
有两种,随机和乱序。
有时把乱序叫做随机。
longaiwp
2017-04-25 22:54:30 +08:00
@hjc4869 这样写的啊,还没注意过
geelaw
2017-04-25 23:25:34 +08:00
@monsoon 结合机器学习只会得到更糟糕的结果,因为随机的目的就是随机,不是让列表符合某种口味的随机。

@hjc4869 确定不 this IEnumerable<T> source 嘛~
hjc4869
2017-04-25 23:27:04 +08:00
@geelaw 这个我图方便直接写要用的类里面了,没做扩展方法
coderluan
2017-04-26 10:22:55 +08:00
有两种吧
一种是最开始随机排序,之后的歌曲还是有顺序的,所以你可以退回上一首
一种是播放完再随机选择下一首,不过有的可能会播放过歌曲加到备选的随机队列
flyico
2017-04-26 11:18:33 +08:00
真随机的话下一首歌有可能正好是你刚才听的那首,同理,你点上一首往往也不是你刚才听的那首

另外一种叫乱序,只是事先打乱了顺序,然后再按顺序播放,绝对不会出现下一首是刚才听过的那首

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/357288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX