C#音乐播放器(WinForm简约小项目)

C#音乐播放器(WinForm简约小项目)

程序内容

要求1:
1. 程序应能够读取MP3文件,并播放其中的音频。
2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
3. 程序应具有良好的用户界面,方便用户进行操作。
4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。
提示:此功能可以使用WindowsMediaPlayer控件

要求2:
1. 程序应能够播放ogg文件。
2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
3. 程序应具有良好的用户界面,方便用户进行操作。
4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。
提示:此功能可以使用Nuget程序包中的Naudi.Vorbis控件

控件介绍

Windows Media Player COM组件

为什么使用Windows Media Player COM组件

Windows Media Player控件可以播放当前最流行的音频、视频文件和大多数混合型的多媒体文件。

Windows Media Player COM组件功能丰富,适配windows

Windows Media Player 控件的对象模型在 .NET Framework 与非托管代码和脚本中的对象模型基本相同,这为开发者提供了丰富的 API 来控制媒体播放和管理媒体库2。

NAudio

为什么使用NAudio

NAudio为.NET平台下的开源库,采用ML-PL协议,开源地址:https://github.com/naudio/NAudio截至今日,已有约5.3k的stars。

NAudio功能强大,且其入门容易。

NAudio强大在于:它支持许多音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效果处理等等(详细介绍可以看Github readme)。
入门容易在于:对C#的语法、结构友好,且对于一个仅仅是播放声音的需求,几行即可搞定:

using(var audioFile = new AudioFileReader(audioFile))
using(var outputDevice = new WaveOutEvent())
{
   
   
    outputDevice.Init(audioFile);
    outputDevice.Play(); // 异步执行
    
    while (outputDevice.PlaybackState == PlaybackState.Playing)
    {
   
   
        Thread.Sleep(1000);
    }
}

WinForm界面介绍

在这里插入图片描述

  1. OGG:用于读取OGG后缀的音乐文件,并载入右侧的列表
  2. Select:用于读取MP3后缀的音乐文件,并载入右侧的列表
  3. Previous:播放列表中当前歌曲的上一首歌曲
  4. Pause:
  5. Next:播放列表中当前歌曲的下一首歌曲
  6. 音量:可通过调整推子来调整歌曲的播放音量
  7. 进度:可通过调整推子来调整歌曲的播放进度

上述功能已经对接到Windows Media Player组件中,MP3文件也可通过Windows Media Player组件来播放歌曲,而OGG文件只能通过上述Buttom来播放歌曲。

代码解析

播放列表

用户在 ListBox 控件中选择一个项目时,这段代码会检查所选的歌曲文件是否存在,并根据文件类型决定如何播放它。

如果所选的歌曲是 .ogg 格式的,代码将使用 NAudio.Vorbis 库来播放它。否则,它将使用 axWindowsMediaPlayer 控件来播放其他格式的音乐文件。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   
   
    // 获取选中的歌曲
    if (listBox1.SelectedItem != null)
    {
   
   
        string selectedSong = listBox1.SelectedItem.ToString();

        // 检查歌曲文件是否存在
        if (File.Exists(selectedSong))
        {
   
   
            if (Path.GetExtension(selectedSong) == ".ogg")
            {
   
   
                // 停止当前正在播放的歌曲
                axWindowsMediaPlayer1.Ctlcontrols.stop();
                if (waveOutDevice != null)
                {
   
   
                    waveOutDevice.Stop();
                    waveOutDevice.Dispose();
                    waveOutDevice = null;
                }
                if (vorbisWaveReader != null)
                {
   
   
                    vorbisWaveReader.Dispose();
                    vorbisWaveReader = null;
                }

                // 清理播放状态
                axWindowsMediaPlayer1.URL = string.Empty;

                // 使用 NAudio.Vorbis 来播放 OGG 文件
                vorbisWaveReader = new NAudio.Vorbis.VorbisWaveReader(selectedSong);
                waveOutDevice = new WaveOut();
                waveOutDevice.Init(vorbisWaveReader);
                waveOutDevice.Play();
            }
            else
            {
   
   
                // 停止当前正在播放的歌曲
                axWindowsMediaPlayer1.Ctlcontrols.stop();

                if (waveOutDevice != null)
                {
   
   
                    waveOutDevice.Stop();
                    waveOutDevice.Dispose();
                    waveOutDevice = null;
                }
                if (vorbisWaveReader != null)
                {
   
   
                    vorbisWaveReader.Dispose();
                    vorbisWaveReader = null;
                }

                // 清理播放状态
                axWindowsMediaPlayer1.URL = string.Empty;

                // 设置播放器的URL为选中的歌曲路径
                axWindowsMediaPlayer1.URL = selectedSong;
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }
        else
        {
   
   
            // 如果歌曲文件不存在,显示错误信息
            MessageBox.Show($"The file {
     
     selectedSong} does not exist.");
        }
    }
}

通常音乐格式载入

select_Click 方法为用户提供了一个文件选择对话框,用于选择通常格式的音乐文件,并将其添加到播放列表中。这个方法还负责停止当前正在播放的音乐,释放相关资源,并更新 axWindowsMediaPlayer 控件以播放新选择的文件。

private void select_Click(object sender, EventArgs e)
{
   
   
    // 创建一个文件选择对话框
    OpenFileDialog openFileDialog = new OpenFileDialog();

    // 设置文件选择对话框的标题
    openFileDialog.Title = "Select a song";

    // 设置文件选择对话框的初始目录
    openFileDialog.InitialDirectory = @"C:\";

    // 设置文件选择对话框的过滤器,只显示 MP3 和 WAV 文件
    openFileDialog.Filter = "MP3 Files|*.mp3|WAV Files|*.wav|OGG Files|*.ogg";

    // 显示文件选择对话框,如果用户选择了一个文件,就将这个文件添加到 listBox1 中
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
   
   

        // 停止当前正在播放的歌曲
        axWindowsMediaPlayer1.Ctlcontrols.stop();
        if (waveOutDevice != null)
        {
   
   
            waveOutDevice.Stop();
            waveOutDevice.Dispose();
            waveOutDevice = null;
        }
        if (vorbisWaveReader != null)
        {
   
   
            vorbisWaveReader.Dispose();
            vorbisWaveReader = null;
        }

        listBox1.Items.Add(openFileDialog.FileName);
        axWindowsMediaPlayer1.URL = openFileDialog.FileName;

        // 设置 TrackBar 控件的 Minimum 和 Maximum 属性
        trackBar1.Minimum = 0;
        trackBar1.Maximum = 100;

        // 设置 progress_trackBar 控件的 Minimum 和 Maximum 属性
        trackBar2.Minimum = 0;
        trackBar2.Maximum = (int)axWindowsMediaPlayer1.currentMedia.duration;
    }
}

OGG音乐格式音乐载入

使用NAudio 库来创建一个播放 OGG 音频文件的应用程序。预先设置文件对话框,并且在用户选择文件后,您使用 NAudio.Vorbis 来播放音频。

private void select_ogg_Click(object sender, EventArgs e)
{
   
   
    // 创建一个文件选择对话框
    OpenFileDialog openFileDialog = new OpenFileDialog();

    // 设置文件选择对话框的标题
    openFileDialog.Title =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值