Windows程序设计作业2

目录

问题要求 

准备工作

页面设计

主要实现思路

一、添加音乐

二、ogg文件播放

三、播放下一首

四、音量调节

总结



问题要求 

要求1:

1. 程序应能够读取MP3文件,并播放其中的音频。

2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。

3. 程序应具有良好的用户界面,方便用户进行操作。

4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。

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

要求2:

1. 程序应能够播放ogg文件。

2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。

3. 程序应具有良好的用户界面,方便用户进行操作。

4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。

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


准备工作

代码头文件

using NAudio;
using NAudio.Wave;
using NAudio.Vorbis;


页面设计

主要实现思路

一、添加音乐

 private void button1_Click(object sender, EventArgs e)
        {
            //用openFileDialog1.Filter来提示用户应输入.mp3、.flac、.wav的文件
            openFileDialog1.Filter = "选择音频|*mp3;*.wav;*.flac";
            openFileDialog1.Multiselect = true;
 
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                listBox1.Items.Clear();
                if (files != null)
                {
                    Array.Clear(files, 0, files.Length);
                }
                files = openFileDialog1.FileNames;
                string[] array = files;
                try
                {
                    foreach (string filePath in array)
                    {
                        // 检查文件是否存在  
                        if (File.Exists(filePath))
                        {
                            listBox1.Items.Add(filePath);
                            localmusiclist.Add(filePath);
                        }
                        else
                        {
                            // 文件不存在,可以记录日志或通知用户  
                            MessageBox.Show($"文件 {filePath} 不存在。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
                catch (Exception ex)
                {
                    // 捕获并处理异常  
                    MessageBox.Show($"发生了一个错误: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

二、ogg文件播放

        private WaveOutEvent waveOut;
        private VorbisWaveReader reader;
        private void StopAndDisposeWaveOut()
        {
            // 停止和释放WaveOutEvent
            if (waveOut != null)
            {
                waveOut.Stop();
                waveOut.Dispose();
                waveOut = null;
            }
 
            // 停止和释放VorbisWaveReader
            if (reader != null)
            {
                reader.Dispose();
                reader = null;
            }
        }

  private void PlayOgg(string filePath)
        {
            try
            {
                axWindowsMediaPlayer1.Ctlcontrols.stop();
                StopAndDisposeWaveOut(); // 停止和释放之前的播放器和读取器资源
                                         // 初始化音频输出设备
                waveOut = new WaveOutEvent();
 
                // 加载OGG文件
                reader = new VorbisWaveReader(filePath);
 
                // 设置音频数据源并开始播放
                waveOut.Init(reader);
                waveOut.Play();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"播放失败: {ex.Message}");
            }
        }

 private void musicPlay(string filename)
        {
            string extension = Path.GetExtension(filename);
            if (extension == ".ogg")
            {
                PlayOgg(filename);
            }
            else
            {
                StopAndDisposeWaveOut();
                // 对于非OGG文件,使用axWindowsMediaPlayer控件播放
                axWindowsMediaPlayer1.URL = filename;
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }

三、播放下一首

private void button3_Click(object sender, EventArgs e)
        {
            if (localmusiclist.Count > 0)
            {
                int index = listBox1.SelectedIndex + 1;
                if (index >= localmusiclist.Count()) { index = 0; }
 
                axWindowsMediaPlayer1.URL = localmusiclist[index];
 
                musicPlay(axWindowsMediaPlayer1.URL);
                label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
 
                listBox1.SelectedIndex = index;
            }
        }


四、音量调节

private void trackBar1_Scroll(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
            label2.Text = trackBar1.Value + "%";
        }


总结

1.文件格式支持:程序能够读取并播放MP3和OGG格式的音频文件。通过使用WindowsMediaPlayer控件和NAudio.Vorbis库,实现了对不同格式的音乐文件的兼容性。
2.异常处理:程序能够处理可能出现的异常情况,如文件不存在、文件读取错误等。通过使用try-catch语句,捕获并反馈给用户相应的错误信息,提高了程序的稳定性和健壮性。
3.用户界面设计:在程序的窗体上添加了ListBox、Label、TrackBar和Button等控件,提供了良好的用户界面。用户可以轻松地加载音频文件、选择曲目、调整音量等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值