使用 AxWindowsMediaPlayer 控件播放點歌列表,需實現「打亂播放順序」功能。
WMPLib.IWMPPlaylist 無直接 Shuffle 方法,需自行演算法打亂後重建播放列表。
private void ShufflePlayList()
{
if (axPlayer.currentPlaylist.count <= 1) return;
// 1. 獲取當前列表媒體項
var items = new List();
for (int i = 0; i < axPlayer.currentPlaylist.count; i++)
items.Add(axPlayer.currentPlaylist.get_Item(i));
// 2. Fisher-Yates 洗牌算法
Random rnd = new Random();
for (int i = items.Count - 1; i > 0; i--)
{
int j = rnd.Next(i + 1);
var temp = items[i]; items[i] = items[j]; items[j] = temp;
}
// 3. 重建播放列表
WMPLib.IWMPPlaylist newList = axPlayer.playlistCollection.newPlaylist("Shuffled");
axPlayer.currentPlaylist.clear(); // 清空舊列表(或新建 playlist)
foreach (var media in items)
axPlayer.currentPlaylist.appendItem(media);
// 4. 從第一首開始播放
axPlayer.Ctlcontrols.play();
}
currentPlaylist 即時生效,無需保存。List<SongInfo>)同步 UI 列表與 WMP 播放列表。