1.作业内容
请编写一个C#程序,实现音乐文件的播放功能。
要求1:
1. 程序应能够读取MP3文件,并播放其中的音频。
2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
3. 程序应具有良好的用户界面,方便用户进行操作。
4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。
提示:此功能可以使用WindowsMediaPlayer控件
要求2:
1. 程序应能够播放ogg文件。
2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
3. 程序应具有良好的用户界面,方便用户进行操作。
4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。
提示:此功能可以使用Nuget程序包中的Naudi.Vorbis控件
2.设计思路
(1)使用C#当中的控件来组成播放器,button可以用来选择歌曲,停止播放,下一首,listbox可以作为音乐列表,trackbar用来调节音量,
3.代码实现
(1)首先需要安装Nuget包中的NAudio和Naudio.vorbis
(2)程序支持的文件格式(mp3,wav,flac,ogg)
private readonly string[] supportedExtensions = { ".mp3", ".wav", ".flac", ".ogg" };
(3)浏览文件
// 浏览文件
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);
}
}
}
(4)播放音乐(程序运行时,需要点击歌曲列表中的歌曲)
// 播放音乐
private void PlayMusic(string filename)
{
// 获取文件扩展名
string extension = Path.GetExtension(filename);
// 如果是Ogg文件
if (extension == ".ogg")
{
// 播放Ogg文件
PlayOggFile(filename);
}
else
{
// 使用Windows Media Player播放其他格式的音乐文件
axWindowsMediaPlayer1.URL = filename;
axWindowsMediaPlayer1.Ctlcontrols.play();
// 显示正在播放的歌曲名
label1.Text = Path.GetFileNameWithoutExtension(filename);
}
}
(5)播放.ogg文件
// 播放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);
}
}
}
}
(6)添加歌曲
// 添加歌曲
private void button1_Click(object sender, EventArgs e)
{
// 打开文件对话框,选择音频文件
BrowseFiles();
}
(7)调整音量
// 音量滑动条滚动
private void trackBar1_Scroll(object sender, EventArgs e)
{
// 调整音量大小
axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
// 更新音量显示标签
label2.Text = trackBar1.Value + "%";
}
(8)停止播放
// 停止播放
private void button2_Click(object sender, EventArgs e)
{
// 停止播放音乐
axWindowsMediaPlayer1.Ctlcontrols.stop();
}
(9)下一首
// 下一首
private void button3_Click(object sender, EventArgs e)
{
// 如果列表框中有音乐文件
if (listBox1.Items.Count > 0)
{
// 计算下一个音乐文件的索引
int nextIndex = (listBox1.SelectedIndex + 1) % listBox1.Items.Count;
// 设置列表框选中下一个音乐文件
listBox1.SelectedIndex = nextIndex;
}
}
4.作业关键
本次作业需要熟练运用控件,
5.完整代码
work_of_work/Form1.cs at main · cpeng5993/work_of_work (github.com)