Spotify如何使用抖動演算法隨機播放歌曲?

banq 發表於 2022-11-17
演算法

自 Spotify 服務推出以來,我們使用 Fisher-Yates shuffle 來生成播放列表的 完全隨機隨機 播放。
Fisher-Yates shuffle 是最漂亮的隨機演算法之一,令人驚訝的是,如此複雜的問題可以解決在某些程式語言中用 3 行程式碼解決。這是透過使用最佳操作次數和最佳隨機數來實現的。

收聽音樂的使用者並不喜歡完美的隨機性。

演算法
這似乎是一個以前必須由其他人解決的問題。事實上,我們發現了一篇部落格文章 The art of shuffling music  by Martin Fiedler,它解決了同樣的問題。但是,他的演算法很複雜,在某些情況下可能會非常慢,因此我們對其進行了修改以更好地滿足我們的需求。
主要思想與抖動中使用的方法非常相似。假設我們有一張黑白圖片,使用了幾百個灰色陰影。

Spotify如何使用抖動演算法隨機播放歌曲?
我們想透過僅使用黑色和白色兩種顏色的畫素來進一步簡化圖片。我們可以使用 隨機取樣:假設一個畫素有 80% 的灰色陰影,那麼它將有 80% 的機會變成黑色,20% 的機會變成白色。我們一個一個地處理畫素,並根據原始灰度為每個畫素隨機決定其新顏色。然而,結果遠不能令人滿意。

Spotify如何使用抖動演算法隨機播放歌曲?


如您所見,黑色畫素形成簇,並且還有大白點。如果黑點和白點分佈得更均勻一些就更好了。Floyd–Steinberg 抖動等其他演算法  避免了聚類併產生了更好的結果。

Spotify如何使用抖動演算法隨機播放歌曲?
在上一張圖片中看到的叢集幾乎完全消失了。

我們可以從抖動演算法中獲得靈感來解決同一藝術家的歌曲叢集問題;我們將嘗試將它們分佈在整個播放列表中。

詳細點選標題

使用者反饋:
1、我不得不說,他們為洗牌所做的事情真的很糟糕。我有一個很大的健身房播放列表,經常聽到相同的曲目,通常順序相同,現在需要向下滾動並在隨機曲目上按播放才能獲得“新”順序。
我理解他們所做的事情的動機,一個加權洗牌,只是在那個洗牌中使用我最聽/最受歡迎的是愚蠢的。

2、這是我對 Spotify 的不滿。我有一個播放列表,其中包含大約 800 首我喜歡的歌曲。它總是從大約 100 首最近新增的歌曲中播放。給我完全隨機的。

3、我相信 Spotify 積極建議使用者快取歌曲作為頻寬/成本節省措施。
我切換到 Apple Music 並用我最少播放的歌曲建立了一個智慧播放列表,我對它的多樣性感到非常滿意。

4、多年前我放棄 Spotify 的原因之一是他們的 shuffle 非常糟糕。