V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
acros
V2EX  ›  问与答

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

  •  
  •   acros · 2017-04-25 17:38:38 +08:00 · 4988 次点击
    这是一个创建于 2804 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    另外一种叫乱序,只是事先打乱了顺序,然后再按顺序播放,绝对不会出现下一首是刚才听过的那首
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2550 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:05 · PVG 11:05 · LAX 19:05 · JFK 22:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.