iTunes 音樂播放的 shuffle 模式是怎麼設計的?以什麼參數作為篩選音樂的依據呢?

參數:播放次數、評價等等

關於如何記錄播放次數請見此處:http://www.zhihu.com/question/19850602


LS兩位沒理解LZ的意思。 http://www.ifanr.com/29498

隨機播放的常見演算法分為兩種,一種是 iTunes/iPod 這種的,類似洗牌的方法。也就是說,當你在播放器中載入一些歌曲後,系統會把這些歌曲放在一個列表裡,然後對這個列表進行一種反排序,也就是把次序打亂,和我們平時打牌的時候洗牌一樣,這樣我們就獲得了一個亂序的播放列表,依次播放這個列表就可以實現亂序的播放了。另一種是大部分的播放器具有的,是進行一個隨機數的運算。也就是通過隨機函數從播放列表中隨機抽取一個歌曲進行播放,和抓鬮的感覺差不多的方法。

「抓鬮」式的演算法有個一些比較明顯的缺陷:1、有一定的概率連續選取到一樣的曲子。2、當你聽了一首歌曲,感覺很爽想再聽的時候,你按下上一首,發現隨機的跳躍到另外的歌曲去了,相信這個會讓很多人很惱火。


直接上代碼

function shuffle (target) {/* target 為一個數組*/

var shuff = target.concat(), j, x, i = shuff.length;

for (; i &> 0; j = parseInt(Math.random() * i), x = shuff[--i], shuff[i] = shuff[j], shuff[j] = x) {};

return shuff;

}


iTunes/iPod的亂序播放是否每次開機時隨機排序一下?如果只是載入歌曲時排序,那在下次歌曲更新前隨機列表都是一樣的,用戶每次聽到的歌的順序也是一樣的,這樣就失去了隨機播放的意義了,而是一個固定的列表了吧。

我覺得每次播放下一首歌曲時生成隨機數的方法很好,只要用一個變數保存上首歌曲的編號就可以返回上一首了。如果隨機數生成函數的種子選的合適的話,連續生成同一隨機數的概率很小吧,基本可以看做小概率事件。


推薦閱讀:

如何讓 iTunes 隨機選取 30 首歌曲同步至 iPhone?
開了iCloud 音樂庫itunes還怎麼同步本地的音樂?
獨立藝人在中國發行音樂除了 iTunes 還有其他的方式嗎?
僅作為音樂播放器,iTunes 好用嗎?對比同類應用如何?
256Kbps的iTunes Plus AAC接近無損嗎?

TAG:iTunes | 音樂 | 蘋果公司AppleInc |