windows程序设计课程作业2——音乐播放器

目录

 1. 作业内容

2. 设计思路

2.1 架构选择

2.2 设计思路

3. 窗体设计

​编辑

​编辑

4. 代码实现

4.1 播放音乐

4.2 浏览文件(选择歌曲)

4.3 音量控制

4.4 播放下一首

4.5 停止播放

5. 完整代码

6. 小结

6.1 收获

6.2 不足及改进


 1. 作业内容

请编写一个C#程序,实现音乐文件的播放功能。

要求1:

程序应能够读取MP3文件,并播放其中的音频。
程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
程序应具有良好的用户界面,方便用户进行操作。
程序应具有良好的兼容性,能在不同版本的C#中正常运行。

提示:此功能可以使用WindowsMediaPlayer控件


要求2:

程序应能够播放ogg文件。
程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
程序应具有良好的用户界面,方便用户进行操作。
程序应具有良好的兼容性,能在不同版本的C#中正常运行。

提示:此功能可以使用Nuget程序包中的Naudi.Vorbis控件

2. 设计思路

2.1 架构选择


    考虑到需求中的界面友好和跨版本兼容性,我们可以选择选择Windows Forms作为开发平台,Windows Forms提供了一个简单而强大的方法来创建桌面应用程序,并且与C#高度兼容,在开发过程,我们选择.NETFramework 4.8.0进行程序设计。

2.2 设计思路


    (1). 界面设计: 使用Windows Forms工具箱中的控件,如按钮、标签和文件对话框构建UI界面。
    (2). 功能编码: 使用OpenFileDialog允许用户选择音频文件。 根据文件扩展名调用相应的播放器对象进行播放。 播放控制,包括开始和停止。
    (3). 异常处理: 捕获并响应各种可能的运行时错误,如文件读取失败、文件格式不支持等。

3. 窗体设计

4. 代码实现

4.1 播放音乐
// 播放音乐
private void PlayMusic(string filename)
{
    string extension = Path.GetExtension(filename);
    if (extension == ".ogg")
    {
        // 播放Ogg文件
        PlayOggFile(filename);
    }
    else
    {
        // 使用Windows Media Player播放其他格式的音乐文件
        axWindowsMediaPlayer1.URL = filename;
        axWindowsMediaPlayer1.Ctlcontrols.play();
        label1.Text = Path.GetFileNameWithoutExtension(filename);
    }
}

// 播放Ogg文件
private void PlayOggFile(string oggFilePath)
{
    // 使用NAudio解码和播放Ogg文件
    using (var vorbisReader = new VorbisWaveReader(oggFilePath))
    {
        using (var outputDevice = new WaveOutEvent())
        {
            outputDevice.Init(vorbisReader);
            outputDevice.Play();
            // 等待播放完毕
            while (outputDevice.PlaybackState == PlaybackState.Playing)
            {
                System.Threading.Thread.Sleep(1000);
            }
        }
    }
}

 

首先使用 Path.GetExtension 方法获取文件的扩展名,以确定文件的类型。

如果不是 .ogg 文件,使用 Windows Media Player 控件(axWindowsMediaPlayer1)来播放该文件。

注:在播放前,其会将文件的 URL 设置为该文件的路径,并启动播放,同时更新label1的文本,显示正在播放的音频文件的文件名。

如果文件扩展名是 .ogg,则调用 PlayOggFile 方法来播放该文件:

使用 VorbisWaveReader 类来读取和解码 .ogg 文件。

创建一个 WaveOutEvent 对象,用于播放音频。

使用 Init 方法将 vorbisReader初始化为 outputDevice 的输入源。

调用 Play 方法开始播放音频。

4.2 浏览文件(选择歌曲)
// 浏览文件
private void BrowseFiles()
{
    openFileDialog1.Filter = "选择音频|*.mp3;*.wav;*.flac;*.ogg";
    openFileDialog1.Multiselect = true;

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        listBox1.Items.Clear();
        foreach (var file in openFileDialog1.FileNames)
        {
            listBox1.Items.Add(file);
        }
    }
}

openFileDialog1.Multiselect = true;
这行代码将允许用户在文件对话框中同时选择多个文件。

4.3 音量控制
// 音量滑动条
private void trackBar1_Scroll(object sender, EventArgs e)
{
    axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
    label2.Text = trackBar1.Value + "%";
}

trackBar1.Value 获取了滚动条当前的值,然后直接用这个值来设置媒体播放器的音量。

4.4 播放下一首
 // “下一首”按钮
 private void button3_Click(object sender, EventArgs e)
 {
     if (listBox1.Items.Count > 0)
     {
         int nextIndex = (listBox1.SelectedIndex + 1) % listBox1.Items.Count;
         listBox1.SelectedIndex = nextIndex;
     }
 }

当点击 button3 时,它会循环地选中 listBox1 列表框中的下一个项目。如果当前已经是最后一个项目,那么再次点击会选中第一个项目,从而实现循环选择的效果。

4.5 停止播放
 private void button2_Click(object sender, EventArgs e)
 {
     // 停止播放音乐
     axWindowsMediaPlayer1.Ctlcontrols.stop();
 }

当点击 button2 时,其会停止 axWindowsMediaPlayer1 控件中正在播放的音乐。

5. 完整代码

代码仓库:https://github.com/Liquor12345/MusicPlayer1.git

6. 小结

6.1 收获

        通过本次练习,我初步了解了如何通过导入第三方库辅助自己的程序设计,并且掌握了如何使用最基本的C#控件来进行UI设计。

6.2 不足及改进

        软件可以支持mp3、wav及ogg等音频文件的播放,对于非Ogg格式的文件,程序使用Windows Media Player控件进行播放,而对于Ogg格式的文件,程序使用了NAudio库进行解码和播放。但其并不支持aac等格式的音频文件且目前的用户界面较为简单,只有文件列表、播放控制按钮和正在播放的歌曲名显示。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值