2010-04-07 172 views
5

我有一個PlayList加載到我的WMP實例中,我希望它只循環一首歌曲。我到目前爲止谷歌搜索的一切都告訴我這樣做:在播放列表中重複播放單曲

private AxWindowsMediaPlayer wmp; 
wmp.settings.setMode("loop", true); 

但是,這似乎只能使整個PlayList重複。我想要的行爲是,如果在播放列表中的歌曲5播放時啓用「重複」,則歌曲5將在播放完成時自動重複播放(而不是繼續播放歌曲6)。大多數車載MP3播放器已經以此方式工作。在我的C#程序中是否有一種很好的本地方式來做到這一點,還是必須設計一個「黑客」解決方案,例如攔截下一首歌曲加載時觸發的事件?

回答

0

難道你不能處理PlayStateChange事件並檢測MediaEnded狀態是否已被設置爲當前曲目並只是倒帶它?

+0

是的,在事實上,這是我正在考慮這樣做的一種方式......我只是想確保沒有一種「本地」方式來處理這個問題,然後再進行一些自定義編碼。 – 2010-04-08 11:17:44

1

嘗試創建一個新的組只有一個,你要玩一遍又一遍的歌。

+0

那麼,這將解決問題,但是當我想關閉重複時會發生什麼?我需要一種機制來重新加載原始播放列表並跳回到當我關閉「重複」時所處的確切軌道和位置。處理播放狀態會更簡單,只需存儲一個標誌即可知道我是否重複播放。 – 2010-04-08 11:16:46

0

簡短的回答是,WMP確實不是支持重複單曲!

所以你能做的最好的就是按照Machta的建議,並動態地編輯播放列表。例如,當您想在播放列表中重複播放單個曲目時,可以編輯播放列表,例如它只有單一曲目並啓用循環。不要忘記將舊的播放列表保存在其他地方。當用戶禁用歌曲循環時恢復您的舊播放列表並將其設置爲不重複。

不幸的是,您有一個缺點,那就是當您更改播放列表時,歌曲可能會從頭開始播放:按照James的建議並安排播放列表更改爲MediaEnded狀態。

這是最好的,我可以告訴你。

1

這是我的方法。對於我的播放列表,而不是使用WMPLib播放列表,我創建了一個類型IWMPMedia的靜態通用列表。這使我可以毫無困難地將歌曲添加到我的播放列表中,因爲通用列表可以追蹤所有歌曲。如此重複一首歌曲,我所做的是我把當前歌曲播放列表播放的當前索引,並設置它等於一個整數,然後我做線沿線的東西:

int repeatSongIndex = index;//in this case, our index is the current song playing 

player.URL = playlist[repeatSongIndex].sourceURL;//lets have player.URL point to the song object chosen to be repeated to its source url (the directory of the file). 
bool isRepeat = true;//to keep track of whether the repeat option is enabled or not.