做网站用百度地图和天地图,三屏合一网站建设,wordpress 知更,电商怎么推广自己的产品1. 作业内容 编写一个C#程序#xff0c;要求实现常见音乐文件的播放功能#xff0c;具体要求如下#xff1a; 1). 播放MP3文件#xff1a; 程序应能够读取MP3文件#xff0c;并播放其中的音频。 2). 播放OGG文件#xff1a; 应能够播放ogg文件。 …1. 作业内容 编写一个C#程序要求实现常见音乐文件的播放功能具体要求如下 1). 播放MP3文件 程序应能够读取MP3文件并播放其中的音频。 2). 播放OGG文件 应能够播放ogg文件。 3). 用户界面 一个简单的窗口包含播放和暂停按钮以及文件选择功能。 4). 异常处理 程序应能够处理可能出现的异常如文件不存在、文件读取错误等。 5). 兼容性 确保代码在多个C#版本上均可运行。
2. 设计思路分析与难点
2.1 架构选择 考虑到需求中的界面友好和跨版本兼容性我们可以选择选择Windows Forms作为开发平台Windows Forms提供了一个简单而强大的方法来创建桌面应用程序并且与C#高度兼容在开发过程我们选择.NETFramework 4.8.0进行程序设计。
2.2 设计思路 1). 界面设计 使用Windows Forms工具箱中的控件如按钮、标签和文件对话框构建用户界面。 2). 功能编码 使用OpenFileDialog允许用户选择音频文件。 根据文件扩展名调用相应的播放器对象进行播放。 播放控制包括开始、暂停和停止。 3). 异常处理 捕获并响应各种可能的运行时错误如文件读取失败、文件格式不支持等为用户提供清晰的错误信息。
2.3 难点分析 1). 文件格式支持 处理多种音频格式MP3,OGG等要求使用不同的库这可能导致代码复杂度增加。 2). 异常处理 音频文件的播放中可能遇到多种异常情况如文件损坏、编解码器不支持等。
3. 窗体设计 按照需求和功能分析实现窗体如下 其中各控件实现功能如下 Label展示当前播放的歌曲。 ListBox展示选择的歌曲列表。 AxWindowsMediaPlayer用于播放常规格式音乐ogg无法用此播放。 OpenFileDialog用于选择音乐文件。 Button用于选择歌曲文件、停止播放、下一曲的功能实现。 TrackBarl用于音量控制。
4. 代码实现
4.0 类成员变量定义
Liststring localmusiclist new Liststring { };
private WaveOutEvent waveOut new WaveOutEvent();
private VorbisWaveReader currentVorbisReader;在类中我们需要定义类成员变量localmusiclist在音乐播放应用中用来追踪和管理用户加载的音乐文件集合waveOut用于播放ogg文件currentVorbisReader为当前使用的ogg文件实例。
4.1 文件选择功能 函数定义
private void button1_Click(object sender, EventArgs e)
{//功能实现见下方
}具体实现
string[] files { };openFileDialog1.Filter 选择音频|*.mp3;*.flac;*.wav;*.ogg;
//同时打开多个文件
openFileDialog1.Multiselect true;在这部分我们采用button和openFileDialog控件来实现文件的选择Filter用于筛选文件类型使得用户只能选择音乐文件不能选择其他文件导致后续功能无法实现报错同时初始化一个files文件存放音乐文件的文件名。
if(openFileDialog1.ShowDialog() DialogResult.OK)
{//清空原有列表listBox1.Items.Clear();localmusiclist.Clear();if (files ! null){Array.Clear(files, 0, files.Length);}files openFileDialog1.FileNames;string[] array files;foreach(string file in array){listBox1.Items.Add(file);localmusiclist.Add(file);}
}这里我们对选择的文件进行处理首先将所有变量清空防止有残留影响后续程序执行之后将文件名添加到ListBox中显示出来用于选择音乐同时利用localmusiclist变量存储文件名并且作为类成员变量进行传输方便后续对音乐的操作。
openFileDialog1.ShowDialog() DialogResult.OK其中if条件判断openFileDialog是否接收到文件不然不执行后续程序。
4.2 音乐选择功能
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{if(localmusiclist.Count 0){axWindowsMediaPlayer1.URL localmusiclist[listBox1.SelectedIndex];musicplay(axWindowsMediaPlayer1.URL);label1.Text Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);}
}在ListBox控件中存在一个事件监听SelectedIndexChanged利用该事件我们可以去获取用户切换列表SelectedIndex是获取目前列表中选择的序号通过该序号和之前的localmusiclist我们可以获取到音乐信息并且进行传参调用函数进行后续的音乐播放。 同时将Label的内容设置为音乐文件的信息并展示。
4.3 音乐选择功能 函数定义
private void musicplay(string filename)
{//功能实现见下方
}具体实现
string extension Path.GetExtension(filename).ToLower();首先获取当前文件名的后缀信息判断文件类型。
if (extension .ogg)
{if (currentVorbisReader ! null){// 确保先停止当前播放再释放资源if (waveOut.PlaybackState ! PlaybackState.Stopped){waveOut.Stop();}currentVorbisReader.Dispose();}currentVorbisReader new VorbisWaveReader(filename);waveOut.Init(currentVorbisReader);waveOut.Play();
}针对不同的文件类型采用不同的处理方式若是ogg文件调用NAudio第三方库总的Vorbis和Wave类来实现播放音乐。 在播放新的音乐时先检测当前是否有正在进行播放或者是暂停播放的ogg音乐先进行处理再播放当前歌曲可以防止同时初始化两次WaveOut产生播放异常。
else
{axWindowsMediaPlayer1.URL filename;axWindowsMediaPlayer1.Ctlcontrols.play();
}若是其他类型的文件使用C#原生库中的WindowsMediaPlayer控件实现播放。
4.4 暂停播放
private void button2_Click(object sender, EventArgs e)
{if (waveOut.PlaybackState PlaybackState.Playing){waveOut.Pause(); // 暂停播放OGG}axWindowsMediaPlayer1.Ctlcontrols.stop(); // 停止其他格式的播放
}音乐暂停功能也需要先区分类型如果waveOut的播放状态为正在播放调用函数暂停音乐否则就是调用WindowsMediaPlayer的暂停函数。
4.5 播放下一首循环播放 函数定义
private void button3_Click(object sender, EventArgs e)
{//功能实现见下方
}具体实现
if(localmusiclist.Count 0)
{//记录下一首音乐的索引int index (listBox1.SelectedIndex 1);axWindowsMediaPlayer1.URL localmusiclist[index];musicplay(axWindowsMediaPlayer1.URL);label1.Text Path.GetFileNameWithoutExtension(localmusiclist[index]);listBox1.SelectedIndex index;
}这里采用索引来得到下一首音乐URL再进行播放同时更改Label的信息显示与SelectedIndex的当前索引。
if (index localmusiclist.Count())
{index 0;
}在索引大于当前音乐列表的时候将Index重置为零从而实现循环播放功能。
4.6 音量控制
private void trackBar1_Scroll(object sender, EventArgs e)
{axWindowsMediaPlayer1.settings.volume trackBar1.Value;
}直接将WindowsMediaPlayer的属性和TrackBar设置的值进行关联即可实现音乐播放事的音乐控制了。
5. 完整代码 代码仓库hmcy-zbx的windows课程设计作业
6. 总结改进思路 本次作业旨在通过导入第三方库辅助自己的程序设计与学习更复杂的控件使用和控件之间的联系通过本次作业我对于C#的控件使用掌握的更加深入了。 尽管当前程序能实现较多的音乐文件格式播放但是不能够实现最新的音乐文件解析例如ape文件与aac文件。 并且缺少高级音频功能的设置例如增加音频效果处理如均衡器、声音增强等和支持音频流的直接下载和播放。