2010-11-20 76 views
1

我需要一個「隨機播放專輯」算法爲我的音頻播放器,如foobar2k。所以問題是:我有一個曲目列表,根據一些標準排序,以便具有相同專輯的曲目全部相鄰。現在,我需要能夠以「隨機播放專輯」模式播放播放列表中的歌曲,也就是說,如果下一首曲目來自同一專輯,請播放它,否則,請轉到下一張隨機專輯的第一首歌曲。如果用戶想要播放上一首曲目,請執行相同的操作,但是要後退。所以問題是:我怎麼知道以前的專輯是什麼?我真的不想保留播放專輯的歷史,或保留一個單獨的列表。隨機組算法

目前,我通過給每個軌道隨機洗牌索引實現規則的洗牌模式,以便通過查找最大洗牌索引小於當前且最小洗牌索引大於當前的軌道來找到前一個和下一個軌道。但它不適用於洗牌專輯模式。有人可以幫助我嗎?

樣品輸入:

Track 1, Album A 
Track 2, Album A 
Track 1, Album B 
Track 2, Album B 
Track 3, Album B 
Track 1, Album C 
Track 2, Album C 
Track 3, Album C 

比方說,當前軌道是軌道1,相冊A.下一曲目將是第2道,專輯A.下一曲目是不是來自同一個專輯,從這樣的第一軌道應該選擇隨機專輯,比如說,專輯1,專輯C.我現在正在做的是選擇下一首歌曲,就好像它是規則的隨機播放模式,然後轉到專輯的第一首歌曲,從而丟失了我從哪裏來的信息到這張專輯。所以當用戶想要去上一張專輯時,我不知道我是如何到達那裏的。希望讓問題更清楚。

謝謝。

+0

您需要顯示示例輸入的示例輸入。 – Yehonatan 2010-11-20 15:17:33

+0

如果你真的需要在非順序列表中回溯,你需要存儲歷史... – 2010-11-23 00:26:24

回答

2

您可以重複使用您的shuffle索引技術來索引相冊。現在軌道索引是一個(專輯隨機索引,軌道位置)對。導航,增加/減少軌道位置;如果超出範圍,請更新專輯索引。

這就是說,你應該重新考慮不保留歷史;它可以讓你用大量的專輯快速跳回。

+0

謝謝,你指出我正確的方式重用我的洗牌指數。我沒有爲專輯保留獨立的隨機播放索引,但在我的常規隨機播放算法中只使用了專輯的第一首曲目。 – 2010-11-23 04:31:29