You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中创建媒体播放器列表并实现随机播放

实现C#歌曲连续随机播放的完整方案

作为C#新手,别担心,咱们一步步来搞定这个需求!你现在已经能播放单首歌曲了,接下来只需要扩展几个关键部分:获取歌曲列表、实现随机选曲,还有自动连续播放。

第一步:获取指定文件夹的所有歌曲文件

首先,我们需要把目标文件夹里的所有WAV歌曲都收集到一个列表里。可以用Directory.GetFiles方法来批量获取符合格式的文件路径:

using System;
using System.Collections.Generic;
using System.IO;
using System.Media;

class MusicPlayer
{
    // 存储所有歌曲路径的列表
    private List<string> _songList = new List<string>();
    // 随机数生成器,用来实现随机选曲
    private Random _random = new Random();
    private SoundPlayer _player = new SoundPlayer();

    public MusicPlayer(string songFolderPath)
    {
        // 获取文件夹里所有.wav文件,支持大小写不敏感匹配
        string[] songFiles = Directory.GetFiles(songFolderPath, "*.wav", SearchOption.TopDirectoryOnly);
        _songList.AddRange(songFiles);

        // 如果没找到歌曲,提前给个提示
        if (_songList.Count == 0)
        {
            Console.WriteLine("指定文件夹里没有找到WAV格式的歌曲哦!");
        }
    }
}

第二步:实现随机播放与连续播放逻辑

接下来要处理核心的播放逻辑:每次随机选一首歌曲,播放完成后自动触发下一首的播放。这里可以利用SoundPlayer的PlayCompleted事件来实现自动续播:

在上面的MusicPlayer类里添加这些方法和事件绑定:

public void StartRandomPlayback()
{
    if (_songList.Count == 0) return;

    // 绑定播放完成事件,播完一首自动切下一首
    _player.PlayCompleted += Player_PlayCompleted;
    // 启动第一首随机歌曲的播放
    PlayRandomSong();
}

private void Player_PlayCompleted(object sender, EventArgs e)
{
    // 当前歌曲播放结束,继续播放下一首随机曲
    PlayRandomSong();
}

private void PlayRandomSong()
{
    if (_songList.Count == 0) return;

    // 随机生成一个列表索引
    int randomIndex = _random.Next(_songList.Count);
    string selectedSong = _songList[randomIndex];

    Console.WriteLine($"正在播放:{Path.GetFileName(selectedSong)}");

    // 设置播放路径并启动播放
    _player.SoundLocation = selectedSong;
    _player.Load();
    _player.Play(); // 用Play()是异步播放,不会卡住主线程
}

第三步:调用播放器开始播放

最后在主程序里实例化这个播放器,传入你的歌曲文件夹路径就能用了:

class Program
{
    static void Main(string[] args)
    {
        // 替换成你的实际歌曲文件夹路径
        string songFolder = @"C:\stuff";
        MusicPlayer player = new MusicPlayer(songFolder);
        player.StartRandomPlayback();

        // 让程序保持运行,按任意键停止播放
        Console.WriteLine("按任意键停止播放...");
        Console.ReadKey();
    }
}

几个实用小建议

  • 如果不想短时间内重复播放同一首歌,可以维护一个“最近播放列表”,随机选曲时跳过这些歌曲
  • SoundPlayer只支持WAV格式,如果后续要播放MP3等其他格式,推荐用NAudio这类第三方库(新手先把WAV的逻辑吃透就好)
  • 记得在项目里引用System.IO和System.Media这两个命名空间哦

内容的提问来源于stack exchange,提问作者Aksel Schlodder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:59:53