当前位置:   article > 正文

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

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

一、作业要求

要求1:

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

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

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

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

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

要求2:

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

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

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

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

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

二、具体实现

1、架构选择

考虑到要求中的“对用户界面友好”和“跨版本兼容性”,我们选择visual studio 2022中的windows Forms(.NETFramework)作为项目。

2、界面设计

根据题目要求选择需要的控如下:

OpenFileDialog:使用户选择音频文件,根据文件扩展名调用相应的播放器对象进行播放,可以选择播放开始,暂停,停止。

listbox:作为显示选中的音乐播放列表

label:显示当前播放的音乐

axWindowsMediaPlayer:专门使用WindowsMediaPlayer控件做音乐播放。

trackBar:作为一个音量控制器

button:作为多个对音乐操作控制的按钮触发事件

ps:为了美化一点界面我还插入了图片

结果如下:

3、代码实现

3.1 类成员变量定义

  1. //选择音乐文件
  2. string[] files;
  3. List<string > localmusiclist=new List<string> { };
  4. private VorbisWaveReader currentVorbisReader;

3.2 “选择歌曲”按钮

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. openFileDialog1.Filter = "选择音频|*.mp3;*.flac;*.wav";//先过滤,选择我要的文件
  4. openFileDialog1.Multiselect = true;//多选属性,打开文件对话框,可以同时选择多个我要的文件
  5. if(openFileDialog1.ShowDialog() == DialogResult.OK)//对话框'ok'='选择确定'
  6. {
  7. localmusiclist.Clear();
  8. listBox1.Items.Clear();//清控件,把文件放进播放器,但是要先清空,以免上次的结果影响这次
  9. if (files != null)
  10. {
  11. Array.Clear(files,0, files.Length);//清文件,把上一次的结果清空
  12. }
  13. files= openFileDialog1.FileNames;//所有符合要求的文件的文件名
  14. string[] array = files;//这些文件名分别作为字符串作为array数组的每一元素
  15. foreach(string file in array )
  16. {
  17. listBox1.Items.Add(file);//列表项,返回int值的下标
  18. localmusiclist.Add(file);//歌单,是string 的列表形式
  19. }
  20. }
  21. }

3.3 listbox1显示播放音乐列表

  1. //显示播放音乐的列表
  2. private void listBox1_SelectedIndexChanged(object sender, EventArgs e)//listbox1的事件响应
  3. {
  4. if(localmusiclist.Count>0)//判断歌单有没有各歌
  5. {
  6. //把索引号放过来
  7. axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex];//[]内需要一个int类型的索引
  8. // axWindowsMediaPlayer1.Ctlcontrols.play()这里为了可以处理多种类型的文件二写成一个处理函数
  9. yytmusicplayer(axWindowsMediaPlayer1.URL);
  10. label1.Text =Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);//把正在播放的歌曲名字放出来,传入大参数是被选中的歌
  11. }
  12. }

3.4 控制音量大小

  1. //控制划尺大小和音量有关
  2. private void trackBar1_Scroll(object sender, EventArgs e)
  3. {
  4. //设置值
  5. axWindowsMediaPlayer1.settings.volume=trackBar1.Value;//value是当前的值
  6. }

3.5 “停止播放”按钮

  1. //停止播放
  2. private void button2_Click(object sender, EventArgs e)
  3. {
  4. axWindowsMediaPlayer1.Ctlcontrols.stop();
  5. }

3.6 “循环播放”按钮

  1. //循环播放
  2. private void button3_Click(object sender, EventArgs e)
  3. {
  4. if(localmusiclist.Count>0)
  5. {
  6. int index = listBox1.SelectedIndex + 1;
  7. if(index>=localmusiclist.Count)//大于等于,不然说范围错误
  8. {
  9. index = 0;
  10. }
  11. axWindowsMediaPlayer1.URL = localmusiclist[index];
  12. yytmusicplayer(axWindowsMediaPlayer1.URL);
  13. label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
  14. listBox1.SelectedIndex = index;
  15. }
  16. }

3.7 单独处理播放ogg文件,“播放ogg”按钮

  1. //播放ogg音乐文件
  2. private void button4_Click(object sender, EventArgs e)
  3. {
  4. OpenFileDialog openFileDialog = new OpenFileDialog();
  5. openFileDialog.Filter = "打开音频|*.ogg";
  6. string oggFilePath = "";
  7. if (openFileDialog.ShowDialog() == DialogResult.OK)
  8. {
  9. oggFilePath = openFileDialog.FileName;
  10. }
  11. // string oggFilePath = @"C:\path\to\your\file.ogg"; // 替换为您的OGG文件路径
  12. using (var vorbisReader = new VorbisWaveReader(oggFilePath))
  13. {
  14. using (var outputDevice = new WaveOutEvent())
  15. {
  16. outputDevice.Init(vorbisReader);
  17. outputDevice.Play();
  18. while (outputDevice.PlaybackState == PlaybackState.Playing)
  19. {
  20. System.Threading.Thread.Sleep(1000);
  21. }
  22. }
  23. // 等待播放完成,或可以根据需要添加其他逻辑
  24. using (var vorbisStream = new VorbisWaveReader(oggFilePath))
  25. {
  26. using (var outputDevice = new WaveOutEvent())
  27. {
  28. outputDevice.Init(vorbisStream);
  29. outputDevice.Play();
  30. //Console.WriteLine("Press any key to stop playback...");
  31. //Console.ReadKey();
  32. //outputDevice.Stop();
  33. while (outputDevice.PlaybackState == PlaybackState.Playing)
  34. {
  35. System.Threading.Thread.Sleep(1000);
  36. }
  37. }
  38. }
  39. }
  40. }

四、完整代码

代码仓库:Windows程序设计作业: 放作业

五、总结

在完成这次作业的过程中,我深入了解了音频文件的播放和异常处理的相关知识,同时也对C#的Windows Forms应用程序开发有了更实际的操作体验。

以下是我具体的掌握方面:

  1. 音频文件播放
    • 我首先学习了如何使用Windows Media Player控件来播放MP3文件。这一过程中,我掌握了如何在Windows Forms应用程序中添加控件、设置控件属性以及调用控件的方法来播放音频。
    • 为了满足播放ogg文件的需求,我学习了如何通过NuGet程序包管理器安装并使用第三方库(如Naudi.Vorbis),锻炼了我处理外部依赖的能力。
  2. 异常处理
    • 在处理音频文件播放的过程中,我意识到了异常处理的重要性,需要考虑并处理文件不存在、文件读取错误等异常情况。
  3. 用户界面设计
    • 在设计用户界面时,我注重了用户体验和操作的便捷性。通过合理布局控件、设置控件样式和添加必要的交互功能,我创建了一个直观易用的音频播放界面。
    • 这一过程锻炼了我对Windows Forms控件的使用能力,也让我更加熟悉了界面设计的原则和技巧。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/580776
推荐阅读
相关标签
  

闽ICP备14008679号