写在前面的话:
为了营造一个很好的交流学习的环境,也是为了迎合学校毕业设计的需求,开通了博客园。在下学期伊始,会每星期更新毕业设计的进度。博客业已开通,为了交流学习,要只是更新毕业设计的进度显得有些做作。博主并不是好看书时写些小评的主儿,遂不知有和内容好献于此,只得将之前课程中或是实习时开发的程序在此做个简述。
因这些项目也是博主心血,也是怕某些学弟学妹直接搬用引发事端,不便将源码原封不动摆在这里,在此只做简要说明。
若有意愿交流学习,可以在评论或是私信留下联系方式。
话不多说,接下来直奔主题。
起初接到这个课题的时候有如下要求:
①本题要求完成视窗程序;
②界面设计美观、温馨和谐 / 炫酷抢眼;
③在用户操作时,有向用户提供的操作提示和反馈信息显示;
④能实现 MP3 等主要音频文件的打开、播放、暂停、停止;
⑤能管理播放队列,能对播放队列进行添加、删除、调整顺序等操作,能保存多个播放列表;
⑥在完成必要功能的基础上,可以跟出题教师交流学生个人的想法,在得到确认后可进一步设计更多与音乐文件播放有关的功能。
对于要求6,与出题教师交流,对音乐播放器加了歌词同步功能。
经需求分析后,得出功能示意图如下:
熟悉vb语言的同学看到这里相信对程序已经有一个大致的想法了,的确音乐播放器的开发并不难,可以学习的借鉴的示例也不少,不过vb.net在控件的使用上与vb上还是有很大的不同,相信这也是同样使用vb.net开发的同学共同的痛。
言归正传,音乐播放控制模块,实现音乐媒体文件的播放、暂停、切换等具体功能,提供较好的与用户交互的音乐控制界面,是音乐文件播放器的工具和门面。将音乐播放控制模块作为音乐控制的工具,主要通过WindowsMediaPlayer控件实现。多媒体应用是非常重要的一类应用,但.NET环境中并没有自带多媒体控件。本次实习采用的WindowsMediaPlayer控件不是系统IDE环境中自带的控件,但又是常用的一个重要控件。通过这个控件,我们可以写出多媒体播放例子,并对音乐播放的各种状态进行控制。
音乐列表管理方面,是音乐文件播放器的轴心。有效的管理音乐播放列表,是实现音乐自由切换、自由添加删除等功能的前提。实现该部分,选择采用DataGridView控件实现。众多教程和网络资源在完成同类任务时,多是选用ListBox控件。采用ListBox控件调用多个同时记录歌曲文件的文件名,URL等信息,这样做操作繁琐,且不利于统一管理,用户也不能直观的看到歌曲的多种信息。现采用DataGridView控件,DataGridView控件属于数据控件,在实现数据管理上具有明显优势。DataGridView控件可添加多列,且该控件可自行对数据按名称排序。另外将DataGridView控件的SelectionMode属性值设置为FullRowSelect后,可直接选中需求歌曲的全部信息,即选择歌曲文件名即为选择了歌曲的文件路径,减少了ListBox实现该功能的繁琐操作。DataGridView控件同时也便于将已添加信息存于到EXCEL表格文件中实现列表的单文件存储。
操作提示和反馈信息显示,主要是通过文件版本信息以用户反馈窗体以及部分案件可显示的气泡实现。是提高交互友好化的主要方法。
展示一下博主在开发该项目时的具体设计如下:
Form1:(播放控制窗体、音乐文件播放器主界面)
AxWindowsMediaPlayer1:多媒体控件,直接用于播放,多次调用。
Label1~12:当前播放音乐的标题、进度、总时长等信息显示,以及部分按键。
NotifyIcon1:托盘图标显示。
PictureBox1~5:主要用作按键的设置。
Timer1~4:用于对事件的监听,如刷新当前播放进度、判断播放是否停止。
TrackBar1:控制音量大小。
Form2:(播放列表窗体)
DataGridView1:记录播放列表。分为两列,分别记录文件名与文件路径。
Label1~4:播放列表的控制按键。
OpenFileDialog1:用于导入音乐文件。
Timer1~2:用于事件的监听。
Form3:(“关于”显示反馈方式及版本信息窗体)
Label1~7:用于文本显示。
LinkLabel1:显示制作者邮箱地址,可添加网络链接。
PictureBox1:显示播放器LOGO。
Form4:(桌面歌词窗体)
Button1:单击打开歌词文件。
DataGridView1:导入歌词。分为两列,分别为歌词标签时间与歌词。
Label1~2:显示当前时间与歌词。
OpenFileDialog1:歌词文件。
Timer1~2:监听事件。
可能存在困难的部分,在博主看来也就只有播放列表的读写,下贴出部分源码,可供大家借鉴学习一下。
播放列表导入(开启时):
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick '开始阶段列表导入 If Dir("d:ofangliebiao.xlsx", FileAttribute.Normal) <> "" Then Dim MyExcel As New Microsoft.Office.Interop.Excel.Application() MyExcel.Visible = False MyExcel.Application.Workbooks.Open("d:ofangliebiao.xlsx") Dim i As Integer = 1 For i = 2 To MyExcel.Worksheets(1).usedrange.rows.count DataGridView1.Rows.Add(MyExcel.Worksheets(1).cells(i, 1).value, MyExcel.Cells(i, 2).value) Next i MyExcel.Workbooks.Close() End If
播放列表保存(关闭时):
Private Sub Label6_Click(sender As Object, e As EventArgs) Handles Label6.Click '关闭按键() Dim MyExcel As New Microsoft.Office.Interop.Excel.Application() MyExcel.Application.Workbooks.Add(True) MyExcel.Visible = False Dim m As Integer For m = 0 To Form2.DataGridView1.ColumnCount - 1 MyExcel.Cells(1, m + 1) = Form2.DataGridView1.Columns(m).HeaderText Next m '往excel表里添加数据() Dim i As Integer For i = 0 To Form2.DataGridView1.RowCount - 2 Dim j As Integer For j = 0 To Form2.DataGridView1.ColumnCount - 1 If Form2.DataGridView1(j, i).Value Is System.DBNull.Value Then MyExcel.Cells(i + 2, j + 1) = "" Else MyExcel.Cells(i + 2, j + 1) = Form2.DataGridView1(j, i).Value.ToString End If Next j Next i If Dir("d:ofangliebiao.xlsx", FileAttribute.Normal) <> "" Then Call Kill("d:ofangliebiao.xlsx") End If MyExcel.ActiveWorkbook.SaveAs("d:ofangliebiao.xlsx") MyExcel.Workbooks.Close() 'Form2.表1TableAdapter.Fill(Form2.PlaylistDataSet.表1) 'Form2.表1TableAdapter.Update(Form2.PlaylistDataSet) Me.Close() End Sub
当然了歌词同步也是很有难度的,博主在写这部分的时候也遇到了挺多问题的,现在处理的话也是有些小bug的,就不贴出来了,有交流的可以私聊我。
写到这里了,秀一下博主的界面咯,这是当时写在报告里的带有功能介绍:
最后,推荐一个工程打包(安装包制作)软件给各位吧:advanced installer
欢迎一同交流哈~