Spotify 如何對歌曲隨機播放?

簡評:果然商業產品中的隨機都是偽隨機...

Spotify 是全球最大的正版流媒體音樂服務平台,今天這篇文章介紹了他們是怎樣改善歌曲隨機播放效果的。

早前,有一些用戶反饋說 Spotify 的隨機播放並不隨機,因為有時會出現連續播放同一個音樂家音樂的情況。但事實上,Spotify 的隨機演算法確實是隨機的,只是和大多數人認為的隨機不一樣。

從創立開始,Spotify 就使用了 Fisher-Yates shuffle algorithm 來實現隨機播放列表。但是,我們要知道完全隨機意味著下面兩個情況都可能發生:

不同顏色代表不同的音樂家。

顯然下面的情況就和人們影響中的隨機不符了,這也就是賭徒謬誤。當然,做產品嘛,用戶永遠是對的,所以 Spotify 也就要想辦法改變改變洗牌演算法,從而更符合大多數人的感覺。

現在假設有 The White Stripes, The xx, Bonobo, Britney Spears 和 Jaga Jazzist 五個音樂家:

我們的目標是將他們的歌盡量均勻的分散到播放列表中。

一圖勝千言:

  • 首先,The White Stripes(紅色)有四首歌, 意味著它們的間距平均應該是播放列表長度的 25%。因此,我們沿著一條線分散了這四首歌,間距從 20% 到 30% 隨機變化,這樣能看起來更隨機。
  • 然後,對於每個音樂家第一首歌的位置引入隨機偏移量,免得第一首歌都從 0 開始。
  • 對於同一音樂家的不同歌曲也做了同樣的處理,避免類似於同一專輯中歌曲太頻繁出現的情況。

演算法非常簡單,只需要幾行代碼就能實現,但效果相當的不錯。

原文:How to shuffle songs?

擴展閱讀:

  1. What does randomness look like? a blog post by Aatish Bhatia
  2. Clustering illusion on Wikipedia
  3. A very lucky wind, a radio episode about a couple of interesting random phenomenons
  4. Dither on Wikipedia
  5. How Randomness Rules Our World and Why We Cannot See It by Michael Shermer

極光日報擴展閱讀:

  • 八大工具,篩選內容好幫手

  • 從漏洞報告中學習

歡迎關註:知乎專欄「極光日報」,每天為 Makers 導讀三篇優質英文文章。


推薦閱讀:

帶你入門Spark(資源整理)
自己寫的編譯器一般幾個符號表比較合適?
句柄是什麼?
XAML與XML的關係與語法的區別,學習wpf應該怎麼學?學XML用什麼教材比較好?

TAG:算法 | 音乐播放器 | 编程 |