首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# WinForm KTV 點歌系統:Windows Media Player 播放列表隨機打亂實現

     編輯:程式設計綜合問答

需求

使用 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 播放列表。
  • 參考資源:WMP 播放列表操作詳解
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved