当前位置:   article > 正文

利用C#程序,实现音乐文件的播放功能(文末附GitHub源代码地址)

利用C#程序,实现音乐文件的播放功能(文末附GitHub源代码地址)

目录

一、功能要求

读取MP3文件要求

读取ogg文件要求

二、前期准备步骤

三、代码实现步骤

1、实现“添加音乐”

2、实现“停止音乐”

3、实现”上一曲“

4、实现“下一曲”

5、实现“播放ogg"

6、listbox1中代码

7、填写showmusic函数

四、全部代码

五、测试

六、总结

1、功能实现

2、心得体会

七、GitHub源代码地址



一、功能要求

读取MP3文件要求

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

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

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

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

提示:本文此功能使用WindowsMediaPlayer控件

读取ogg文件要求

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

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

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

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

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

二、前期准备步骤

步骤一:打开C#项目在Visual Studio 2022中,创建新项目,选择Windows窗体应用(.NET Framework)。

 步骤二:左键点击常规(在工具箱中),右键点击指针“选择项” -> “com组件”->“windows media player",将其拖到窗口。

步骤三:右键点击项目(在解决方案资源管理器中),选择管理nuGet资源->”浏览“->”NAUdio.Vorbis“安装。

步骤四:拖工具箱当中的button、listbox、label控件到Form1.cs[设计]当中,添加按键。

三、代码实现步骤

1、实现“添加音乐”

这段代码的目的是让用户从文件系统中选择音频文件,并将这些文件的路径显示在ListBox控件中,同时将它们存储在一个列表中供后续使用。

  1. openFileDialog1.Filter = "选择音频|*mp3;*.wav;*.fllac";
  2. openFileDialog1.Multiselect = true;
  3. if(openFileDialog1.ShowDialog() == DialogResult.OK)
  4. {
  5. listBox1.Items.Clear();
  6. if (files!=null)
  7. {
  8. Array.Clear(files,0, files.Length);
  9. }
  10. files =openFileDialog1.FileNames;
  11. string[] array = files;
  12. foreach(string x in array)
  13. {
  14. listBox1.Items.Add(x);
  15. localmusiclist.Add(x);
  16. }
  17. }

2、实现“停止音乐”

axWindowsMediaPlayer1.Ctlcontrols.stop(); 

3、实现”上一曲“

此代码实现播放上一曲的功能,如果播放到第一一曲,则会从最后一曲开始播放。

  1. if (localmusiclist.Count > 0)
  2. {
  3. int index = listBox1.SelectedIndex;
  4. if (index < 0)
  5. {
  6. index = 0;
  7. }
  8. else
  9. {
  10. index--;
  11. if (index < 0)
  12. {
  13. index = localmusiclist.Count - 1;
  14. }
  15. }
  16. axWindowsMediaPlayer1.URL = localmusiclist[index];
  17. showmusic(axWindowsMediaPlayer1.URL);
  18. label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
  19. listBox1.SelectedIndex = index;
  20. }

4、实现“下一曲”

此代码实现播放下一曲的功能,如果播放到最后一曲,则会从第一曲开始播放。

  1. if (localmusiclist.Count > 0)
  2. {
  3. if (listBox1.SelectedIndex + 1 > localmusiclist.Count)
  4. {
  5. axWindowsMediaPlayer1.URL = localmusiclist[0];
  6. }
  7. axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex+1];
  8. musicplay(axWindowsMediaPlayer1.URL);
  9. label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
  10. }

5、实现“播放ogg"

  1. string oggFilePath = "path_to_your_ogg_file.ogg"; // 替换为您的OGG文件路径
  2. OpenFileDialog openFileDialog = new OpenFileDialog();
  3. openFileDialog.Filter = "播放音频|*.ogg";
  4. if (openFileDialog.ShowDialog()== DialogResult.OK)
  5. {
  6. oggFilePath = openFileDialog.FileName;
  7. }
  8. using (var vorbisreader = new VorbisWaveReader(oggFilePath))
  9. {
  10. using (var outputDevice = new WaveOutEvent())
  11. {
  12. outputDevice.Init(vorbisreader);
  13. outputDevice.Play();
  14. // 等待播放完毕,或者您可以添加其他逻辑,比如用户输入来停止播放
  15. while (outputDevice.PlaybackState == PlaybackState.Playing)
  16. {
  17. System.Threading.Thread.Sleep(1000);
  18. }
  19. }
  20. }

6、listbox1中代码

  1. if (localmusiclist.Count > 0)
  2. {
  3. axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex];
  4. musicplay(axWindowsMediaPlayer1.URL);
  5. label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
  6. }

7、填写showmusic函数

  1. private void showmusic(string filename)
  2. {
  3. string extension = Path.GetExtension(filename);
  4. if (extension == ".ogg")
  5. {
  6. Console.WriteLine("this is ogg file.");
  7. }
  8. else
  9. {
  10. Console.WriteLine("this is not ogg file.");
  11. axWindowsMediaPlayer1.Ctlcontrols.play();
  12. }
  13. }

四、全部代码

  1. using NAudio.Wave;
  2. using NAudio.Vorbis;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. namespace WindowsMusic1
  15. {
  16. public partial class Form1 : Form
  17. {
  18. string[] files;
  19. List<string> localmusiclist = new List<string> { };
  20. public Form1()
  21. {
  22. InitializeComponent();
  23. }
  24. private void showmusic(string filename)
  25. {
  26. string extension = Path.GetExtension(filename);
  27. if (extension == ".ogg")
  28. {
  29. Console.WriteLine("this is ogg file.");
  30. }
  31. else
  32. {
  33. Console.WriteLine("this is not ogg file.");
  34. axWindowsMediaPlayer1.Ctlcontrols.play();
  35. }
  36. }
  37. private void button1_Click(object sender, EventArgs e)
  38. {
  39. openFileDialog1.Filter = "选择音频|*mp3;*.wav;*.fllac";
  40. openFileDialog1.Multiselect = true;
  41. if(openFileDialog1.ShowDialog() == DialogResult.OK)
  42. {
  43. listBox1.Items.Clear();
  44. if (files!=null)
  45. {
  46. Array.Clear(files,0, files.Length);
  47. }
  48. files =openFileDialog1.FileNames;
  49. string[] array = files;
  50. foreach(string x in array)
  51. {
  52. listBox1.Items.Add(x);
  53. localmusiclist.Add(x);
  54. }
  55. }
  56. }
  57. private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
  58. {
  59. if (localmusiclist.Count > 0)
  60. {
  61. axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex];
  62. showmusic(axWindowsMediaPlayer1.URL);
  63. label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
  64. }
  65. }
  66. private void trackBar1_Scroll(object sender, EventArgs e)
  67. {
  68. axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
  69. label2.Text = trackBar1.Value + "%";
  70. }
  71. private void button2_Click(object sender, EventArgs e)
  72. {
  73. axWindowsMediaPlayer1.Ctlcontrols.stop();
  74. }
  75. private void button3_Click(object sender, EventArgs e)
  76. {
  77. if (localmusiclist.Count > 0)
  78. {
  79. int index = listBox1.SelectedIndex + 1;
  80. if (index >= localmusiclist.Count()) { index = 0; }
  81. axWindowsMediaPlayer1.URL = localmusiclist[index];
  82. showmusic(axWindowsMediaPlayer1.URL);
  83. label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
  84. listBox1.SelectedIndex = index;
  85. }
  86. }
  87. private void Form1_Load(object sender, EventArgs e)
  88. {
  89. }
  90. private void button4_Click(object sender, EventArgs e)
  91. {
  92. string oggFilePath = "path_to_your_ogg_file.ogg"; // 替换为您的OGG文件路径
  93. OpenFileDialog openFileDialog = new OpenFileDialog();
  94. openFileDialog.Filter = "播放音频|*.ogg";
  95. if (openFileDialog.ShowDialog()== DialogResult.OK)
  96. {
  97. oggFilePath = openFileDialog.FileName;
  98. }
  99. using (var vorbisreader = new VorbisWaveReader(oggFilePath))
  100. {
  101. using (var outputDevice = new WaveOutEvent())
  102. {
  103. outputDevice.Init(vorbisreader);
  104. outputDevice.Play();
  105. // 等待播放完毕,或者您可以添加其他逻辑,比如用户输入来停止播放
  106. while (outputDevice.PlaybackState == PlaybackState.Playing)
  107. {
  108. System.Threading.Thread.Sleep(1000);
  109. }
  110. }
  111. }
  112. }
  113. private void label2_Click(object sender, EventArgs e)
  114. {
  115. }
  116. private void label1_Click(object sender, EventArgs e)
  117. {
  118. }
  119. private void button5_Click(object sender, EventArgs e)
  120. {
  121. if (localmusiclist.Count > 0)
  122. {
  123. int index = listBox1.SelectedIndex;
  124. // 如果当前没有选中任何项,或者已经是第一项,可以选择播放最后一项或者保持当前项不变
  125. if (index < 0)
  126. {
  127. index = 0; // 或者你可以选择播放列表中的最后一项:index = localmusiclist.Count - 1;
  128. }
  129. else
  130. {
  131. index--; // 否则播放上一项
  132. // 如果现在索引是-1(即原本是第一项),可以选择播放列表中的最后一项或者保持当前项不变
  133. if (index < 0)
  134. {
  135. index = localmusiclist.Count - 1; // 循环到最后一项
  136. }
  137. }
  138. axWindowsMediaPlayer1.URL = localmusiclist[index];
  139. showmusic(axWindowsMediaPlayer1.URL);
  140. label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
  141. listBox1.SelectedIndex = index;
  142. }
  143. }
  144. }
  145. }

五、测试

六、总结

1、功能实现

音乐播放器已经具备了基本的播放控制功能,包括播放播放音乐(通过的button1_Click事件处理)、停止音乐(通过的button2_Click事件处理)、上一曲(通过button5_Click事件处理)、播放下一曲(通过的button3_Click事件处理)和播放ogg(通过的button4_Click事件处理)。

播放器能够从一个包含音乐文件路径的列表中加载并播放音乐。

播放器的当前播放曲目会在一个列表框(listBox1)中显示,并且当播放曲目变化时,列表框的选中项也会相应更新。

播放器还包含了一个标签(label1)用于显示当前播放曲目的文件名。

播放器还包含音量的调节(label2)。

2、心得体会

在开发过程中,我接触并学习了许多新的技术和工具,如Windows Media Player控件、ActiveX控件的使用、文件路径处理(如Path.GetFileNameWithoutExtension)等。这些新技术和工具不仅帮助我解决了开发中的难题,也拓宽了我的技术视野。

七、GitHub源代码地址

https://github.com/chenwq2004/windowshomework.git

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/684676
推荐阅读
相关标签
  

闽ICP备14008679号