




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MP3播放器软件的设计与实现目 录摘 要3ABSTRACT3前 言41 MP3播放器软件系统的体系结构51.1-开发工具及开发语言的选取51.2-软件开发设计的相关技术51.3-数据设计61.4-软件系统流程图61.5-类的设计72 MP3播放器软件系统的实现92.1-播放软件主窗体92.2-播放列表窗体142.3-歌词窗体192.4-迷你模式窗体213 MP3播放器软件系统的测试233.1-MP3播放器软件的整体测试233.2-MP3播放器软件的部署发布243.3-MP3播放器软件存在的问题25结 束 语26致 谢27参考文献28MP3播放器软件的设计与实现洪祖富(电子信息工程学系 指导教师:林元国)摘 要 本软件是一款应用c#高级语言在VisualStudio2005的环境下编写的MP3播放器软件。本软件的主要功能有可以保存播放列表、显示多媒体文件相关信息和打印歌词等。在经过对市场的分析和了解,对用户的使用习惯的调查,和可行性分析的通过,本人决定开发本软件。本文下面将详细介绍本软件的实现过程和步骤,并且介绍开发工具和语言的相关信息和技术。关键词:音乐播放器,C#,VisualStudio,多媒体,ABSTRACTThis software is a mp3 music player which was written by high-level language of C# at the enviroment of VisualStudio2005.The softwares main function are as follows,it can save the music list、display the multimeidas related information、print the lyric of current media.Through the analysis and comprehend of the market、the surveying of the custom by long usage of users and the pass of the feasibility analysis,I decide to develop this software.This article will tell you the step and process of the softwares complement and also tell you something about the development tool and language that used to be developped the software.Key Words: Music Player,C#,VisualStudio,Multimedia前 言在古代,人们很难有机会经常欣赏音乐。到了现代,科技日新月异,能播放音乐的软件和硬件等产品不断面世。音乐变得越来越重要,人们在日常生活中需要音乐来调节生活,可以说音乐是生活的调剂品,人们也离不开音乐。个人计算机的出现是一个世纪的杰作,人们可以利用计算机处理许多事情,这就包括播放音乐。所以现在市场上的音乐播放器软件就很多。随着互联网以及多媒体技术的普及和应用,多媒体的种类和应用变得越来越多,人们对音乐的追求和欣赏的水平也越来越高。MP3播放器软件为了人们能在个人计算机上更好的去欣赏音乐而变得越来越来功能强大丰富,界面多姿多彩,并且MP3播放器软件得数量也多了起来。现在用户面对市场上那么多的MP3播放软件,需要作出一个符合自己风格的选择。本软件的开发涉及到软件工程,面向对象程序开发以及多媒体技术等相关技术。本软件的开发工具选用的是微软公司出品的Visual Studio2005,这是一款功能强大的开发工具,可以很好的满足开发人员的需要。开发语言选用的是C#,与开发平台Visual Studio2005相适应,可以更好更有效的进行开发。 本软件着重对用户的使用习惯的尊重,以贴近用户为目标。在对现有的一些知名的播放器软件进行详细的分析和测试,发现他们优秀的地方予以继承,发现不足的地方予以摒弃或者修改完善。再加上自己的一些见解和创意使这款软件成为与其他播放器软件的不同且有自己特色的MP3播放器软件。1 MP3播放器软件系统的体系结构1.1-开发工具及开发语言的选取本软件的开发工具采用的是微软公司的Visual Studio 2005.Net。Visual Studio 是一套功能强大并且完整的开发工具集,它用于生成桌面应用程序、移动应用程序、ASP.NET Web 应用网站和XML Web 服务。一共有4种语言Visual Basic、Visual C+、Visual C# 和 Visual J# 都集成在相同的开发环境(IDE)当中,也就是说他们共享这个IDE,可以很方便的使用相同的工具而且还可以创建使用不同语言编写的应用程序。此外,这些语言利用了 .NET Framework 的功能,通过此框架可使用简化 ASP Web 应用程序和 XML Web Services 开发的关键技术。开发语言采用的是微软公司的C#高级程序语言。C#是微软公司力推的一门高级语言,它继承自C 和 C+语言,和Java语言的风格相类似。C语言是面向过程语言不符合当代思想趋势,C+语言执行效率高但是学习起来很复杂,主要是C+包括了C语言的一些不好的东西,使用Java语言开发效率不高但是它的语法很简洁。C#语言继承了上述语言的优点并且抛弃了他们的缺点,同时他自己也加入了新的特性,使得程序员利用C#开发应用程序变得更加安全有效方便。1.2-软件开发设计的相关技术本课题涉及到软件工程,面向对象程序开发以及多媒体技术等相关技术。软件工程 (Software Engineering)是一门庞大而且复杂的学科。自从出现软件的概念以来,开发人员从事软件开发不断面临着各种各样的难题。软件开发常常遭遇中断甚至是废弃的局面,出现的这样的问题的根本原因是开发人员没有软件工程的思想。软件工程是将系统化的、规范化的、可量化的方法应用于软件开发、运行和维护。利用软件工程思想可以经济地获得可靠地,可以再实际机器上运行的高效的软件。现今,软件工程的应用面十分广泛,你可以在各个行业里发现它的应用。它是人们的工作效率提高了很多。面向对象编程(Object Oriented Programming,OOP)是现代流行的编程思想和方法。他强调每个东西都是对象,包括一些虚的看不见的东西。每个对象都有自己的属性和方法,每个对象都属于某个类,这些类之间可以继承、封装等。面向对象的思想比以前的面向过程的思想要好得多,比较显著的区别就是一个相同的项目,面向对象编程的代码量变少了很多并且他比面向过程的重用性高得多,这样也就节约了公司和团队的开发成本多媒体是指像声音、音乐、图像和视屏等等计算机格式文件,常见的多媒体格式有MP3、JPEG、MPG等待。多媒体技术就是利用这些多媒体,将它们以一定得方式整合起来形成一个新的表现内容,并且能与用户进行交互,所谓交互就是互动。这就是多媒体技术。1.3-数据设计由于播放器不需要去储存多媒体文件,它只需要多媒体文件的地址信息。所以没必要使用数据库,只要将必要的信息存进文本文件,再对文本文件的存储格式进行设置。编程采用的用以存储临时数据的数据结构为泛型list,泛型为使用C#语言编写面向对象程序增加了极大地灵活性和效力,它允许程序员将一个实际的数据类型的规约延迟至泛型类型的实例被创建时才确定。List是泛型集合中的一种,它的使用方便并且是强类型集合,并不需要多余的开销来进行类型的转换,所以代码的编写更容易被阅读和重用。1.4-软件系统流程图下图是本软件的流程图,本软件一共设计了5个窗体,以下将详细介绍软件流程通过音乐主窗体可以打开播放列表窗体、歌词窗体和选项窗体。主窗体还可以和迷你窗体进行切换。打开播放列表窗体后,可以添加列表或者操作现有列表,可以往列表中添加歌曲或者双击播放现有歌曲等操作。如果双击播放歌曲的话将返回该歌曲地址给主窗体,由主窗体处理并播放歌曲以及显示该歌曲的相关信息。同时通过主窗体可以打开歌词窗体,当播放音乐时会自动在指定文件夹里搜索歌词文件并打印,如果没有则不打印。打开选项窗体可以对软件进行一些常规上的设置,如改变歌词文件或者播放列表的存储位置等等。1.5-类的设计本软件类的设计完全遵循面向对象的思想,以下将详细介绍每个类的用途及其相关类。Music类:这个类是个抽象类,不能被实例化,只能被继承和实现。他有两个子类分别是WmaFileInfo类和Mp3FileInfo类。Music类主要是控制和管理各种不同的多媒体格式信息。WmaFileInfo类:这个类用来处理wma格式的音乐文件。通过这个类可以获得wma格式文件的歌名、歌手和歌曲时间等信息。继承与父类Music。Mp3FileInfo类:这个类用来处理mp3格式的音乐文件。通过这个类可以获得mp3格式文件的歌名、歌手和歌曲时间等信息。继承与父类Music。下图是Music类、WmaFileInfo类和Mp3FileInfo类之间的类关系图。FileFormat类:这个类主要是处理软件遇上不同格式的文件时的情况而设计的。这里不仅包括多媒体格式文件,还包括播放列表的文本文件。这个类记录了该文件的地址和格式,进过判断后做出操作选择。SystemVar类:这个类存储了一些全局变量,这些变量需要存储在文本文件里,每次系统启动都会预先读取并且初始化这个类。还有五个窗体类将在下面进行详细的介绍。2 MP3播放器软件系统的实现2.1-播放软件主窗体播放软件主窗体主要用来播放音乐并且显示当前播放音乐的相关信息,比如歌名时间等。它也提供了与播放列表窗体和歌词窗体交互的按钮。上图是播放软件主窗体的界面,它的主要功能有:播放音乐:播放音乐是通过windows media player控件实现,整个主窗体其实就是一个windows media player控件实例的模拟。通过模拟实现其大部分功能并增加其他一些功能。播放音乐以及其他一些初始化工作的代码如下: l_MusicStatus.Text = 播放;/更改状态 b_PlayOrPause.BackgroundImage = Properties.Resources.pause; timer_MusicPlay.Start(); l_MusicName.Text = Music.MusicName(label.Text);/显示歌名 wmp.URL = label.Text; /开始播放 pic_ProBar.CreateGraphics().Clear(Color.White);/清除进度 lyric.DisplayLyrics(l_MusicName.Text);/显示歌词显示进度条:有了进度条,用户可以很方便地看出现在歌曲的进度以及调整进度,当鼠标移至进度条上时还会显示时间,方便用户进行调整。单击进度条上的任何位置都可以把进度调整到此位置。此进度条的实现是利用API 的GDI+的技术而成的。GDI是Graphics Device Interface的缩写,中文的意思是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。利用GDI+可以绘制各种各样的线条和形状。这里的ProcessBar()方法是通过定时器调用的,定时器的时间间隔为1s。进度条的相关代码如下:/ / 画进度条 / private void ProcessBar() using (Graphics g = pic_ProBar.CreateGraphics() Brush brush = Brushes.Green; /Pen pen = new Pen(brush); int width = (int)(wmp.Ctlcontrols.currentPosition / wmp.currentMedia.duration * pic_ProBar.Width); Rectangle rect = new Rectangle(1, 1, width, pic_ProBar.Height);/相对pic_ProBar的坐标 g.FillRectangle(brush, rect); / / 当鼠标在进度条上时显示时间提示 / private void pic_ProBar_MouseMove(object sender, MouseEventArgs e) if (wmp.URL != string.Empty) int time = (int)(double)e.X / (double)pic_ProBar.Width * wmp.currentMedia.duration); string shortTime = (time/60) +:+time%60; Point p = new Point(e.X, e.Y + 30); tooltip.Show(shortTime, this.pic_ProBar, p); / / 单击进度条时调整进度 / private void pic_ProBar_MouseClick(object sender, MouseEventArgs e) if (wmp.URL != string.Empty) double time = (double)e.X / (double)pic_ProBar.Width * wmp.currentMedia.duration); wmp.Ctlcontrols.currentPosition = time; lyric.TimerTime = (int)time; pic_ProBar.CreateGraphics().Clear(Color.White);/清除进度 音量控制条和静音按钮:音量控制条可以调整音量大小,只要通过拖动控制按钮就可以很方便,通过获取鼠标的水平位置并判断是否超界来实时变动按钮的位置来实现这样的效果。当单击静音按钮时按钮颜色会由绿色变成红色,表示已静音。再次单击则会由红色变成绿色,表示无静音。代码如下:private void timer_Volume_Tick(object sender, EventArgs e) /100为picturebox5的长度 if (b_Volume.Location.X = this.pictureBox2.Location.X & b_Volume.Location.X = this.pictureBox2.Location.X + 100) b_Volume.Location = new Point(MousePosition.X - pictureBox2.Location.X - this.Location.X + 150, b_Volume.Location.Y); if (b_Volume.Location.X this.pictureBox2.Location.X + 100) b_Volume.Location = new Point(this.pictureBox2.Location.X + 100, b_Volume.Location.Y); 上一首、下一首、播放或暂停和停止按钮:关于上一首和下一首,这两个都会进行界限检查,以防止索引超出已有的范围。播放按钮和暂停按钮其实是同一个按钮,当用户单击完播放按钮后,此按钮的功能就变成暂停,反之同理。代码如下: / / 停止 / private void b_Stop_Click(object sender, EventArgs e) if (wmp.URL != string.Empty) wmp.Ctlcontrols.stop(); l_MusicStatus.Text = 停止; / / 播放或者暂停 / private void b_PlayOrPause_Click(object sender, EventArgs e) switch (wmp.playState) case WMPLib.WMPPlayState.wmppsPlaying: wmp.Ctlcontrols.pause(); l_MusicStatus.Text = 暂停; b_PlayOrPause.BackgroundImage = Properties.Resources.play; break; case WMPLib.WMPPlayState.wmppsPaused: case WMPLib.WMPPlayState.wmppsStopped: wmp.Ctlcontrols.play(); l_MusicStatus.Text = 播放; b_PlayOrPause.BackgroundImage = Properties.Resources.pause; break; default : break; / / 上一首 / private void b_Up_Click(object sender, EventArgs e) if (PlayList.AddrTemp.Contains(wmp.URL) if (PlayList.AddrTemp.IndexOf(wmp.URL) != 0) label.Text = PlayList.AddrTemp(PlayList.AddrTemp.IndexOf(wmp.URL) - 1).ToString(); / / 下一首 / private void b_Down_Click(object sender, EventArgs e) if (PlayList.AddrTemp.Contains(wmp.URL) if (PlayList.AddrTemp.Count != PlayList.AddrTemp.IndexOf(wmp.URL) label.Text = PlayList.AddrTemp(PlayList.AddrTemp.IndexOf(wmp.URL) + 1).ToString(); 判断模式进行下一步播放操作:本软件一共设计了多个播放模式,有单曲播放(默认模式)、单曲循环、顺序播放、顺序循环、随机播放等。当前歌曲播放完后将根据用户设置的模式进行下一首歌曲的安排。代码如下:if (wmp.playState = WMPLib.WMPPlayState.wmppsStopped) switch (pMode) case PlayMode.single_play:/单曲播放 break; case PlayMode.single_loop:/单曲循环 wmp.Ctlcontrols.play(); break; case PlayMode.order_play:/顺序播放 b_Down.PerformClick(); break; case PlayMode.ordr_loop:/循环播放 int index = PlayList.AddrTemp.IndexOf(wmp.URL); if (PlayList.AddrTemp.Count != index + 1)/不是最后一首就下一首 label.Text = PlayList.AddrTempindex + 1.ToString(); else /是最后一首就播放第一首 label.Text = PlayList.AddrTemp0.ToString(); break; case PlayMode.randam:/随机播放 if (PlayList.AddrTemp.Count != 0) Random r = new Random(); int num = r.Next(0, PlayList.AddrTemp.Count); string url = PlayList.AddrTempnum.ToString(); if (label.Text = url) url = (num != PlayList.AddrTemp.Count - 1)?PlayList.AddrTempnum + 1.ToString():PlayList.AddrTempnum - 1.ToString(); label.Text = url; break;2.2-播放列表窗体播放列表窗体这里记录了用户创建过的播放列表,通过选择相应播放列表就会在listbox里打印出该播放列表里的音乐文件名称。在该窗体建立的时候会在默认文件夹里搜索已存在的播放列表并且打印。用户可以管理这些播放列表,可以进行添加、删除、保存等操作。用户双击音乐列表就可以实现播放音乐。这里也提供了本地搜索音乐的接口。本窗体支持用户拖放操作,这也方便了用户的操作。播放列表窗体还提供了多种模式选择,供用户在不同情况下选择不同的播放模式。下图就是播放列表窗体的界面:上面一行是菜单栏,下面左边的是播放列表,右边的是当前列表里的全部歌曲名称。播放列表窗体的主要功能和相应代码有双击播放列表实现播放多媒体:双击list_Music列表,将触发双击事件并将该音乐的地址信息传给主窗体的windows media player控件接着播放。代码如下:private void list_Music_DoubleClick(object sender, EventArgs e) if (list_Music.SelectedIndex = 0) /如果列表不为空 string addr = AddrTemplist_Music.SelectedIndex.ToString(); if (addr = MusicPlayer.label.Text) MusicPlayer.label.Text = hongzufuguidingderuanqibazaodedongxi; MusicPlayer.label.Text = addr;/传送播放文件地址切换列表和打印列表:用户可以再不同的播放列表之间切换,这就需要清除之前的播放列表在list_Music中的内容然后打印新的播放列表的全部信息。代码如下: / 切换list_PlayList private void list_PlayList_SelectedIndexChanged(object sender, EventArgs e) if (list_PlayList.SelectedIndex = 0) PrintListItem(); / / 打印列表 / private void PrintListItem() list_Music.Items.Clear(); AddrTemp = AddrListlist_PlayList.SelectedIndex; if (AddrTemp.Count 0) for (int i = 0; i 1& list_PlayList.Items.Count 0)/无选择文件,文件错误,列表为空 FileFormat ff = new FileFormat(op.FileName); SaveToMemory(0,0, op.FileName); list_Music.Items.Add(Music.MusicName(op.FileName); op.Dispose(); private void 文件夹ToolStripMenuItem_Click(object sender, EventArgs e) /打开文件夹 FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog(); folderBrowserDialog1.SelectedPath = Properties.Resources.DafaultDirectory;/设置初始打开路径 folderBrowserDialog1.ShowNewFolderButton = true;/ 显示新建文件夹按钮 folderBrowserDialog1.Description = 请选择音乐文件夹:; folderBrowserDialog1.ShowDialog(); if (folderBrowserDialog1.SelectedPath.Length 1) DirectoryInfo dir = new DirectoryInfo(folderBrowserDialog1.SelectedPath);/定义DirectoryInfo实例 Mp3FileInfo mp3FI = new Mp3FileInfo(); foreach (FileInfo f in dir.GetFiles(*.mp3) /FileFormat ff = new FileFormat(f.FullName); list_Music.Items.Add(Music.MusicName(f.FullName); SaveToMemory(0, 0, f.FullName); folderBrowserDialog1.Dispose(); 本地搜索需要引用shell32文件,shell32.dll是Windows的32位外壳动态链接库文件,用于打开网页和文件,建立文件时的默认文件名的设置等大量功能。System.Runtime.InteropServices.DllImport(shell32.dll, EntryPoint = ShellExecute)private static extern int ShellExecute(int hwnd, string lpOperation, string lpfile, string lpParameters, string lpDirectory, int nShowCmd); ShellExecute(0, find, , , , 0);列表菜单:在列表菜单下可以进行新建列表、添加列表、保存列表等操作,还可以一次性对所有列表进行保存和删除。关于列表,我首先是定义了两个list类型的内存变量List AddrTemp = new List();ListList AddrList = new ListList();第一个变量用来保存当前播放列表的地址内容,当播放列表被切换时,这个变量的值也随着改变。第二个变量用来保存所有播放列表的内容,包括当前的播放列表。在每一次启动软件时都会将所有的播放列表里的地址信息保存在AddrList里面。这样做是为了方便并且快速的对播放列表进行一系列操作。private void 新建列表ToolStripMenuItem_Click(object sender, EventArgs e) /新建列表 AddrList.Add(new List(); int index = list_PlayList.Items.Count + 1; string fileName = SystemVar.mpplPath + 新列表 + index + .txt; FileStream myStream = new FileStream(fileName, FileMode.Create); list_PlayList.Items.Add(新列表 + (list_PlayList.Items.Count + 1); myStream.Close(); private void 添加列表ToolStripMenuItem_Click(object sender, EventArgs e) /添加列表 OpenFileDialog op = new OpenFileDialog(); op.Title = 请选择播放列表文件; op.InitialDirectory = c:; op.ShowDialog(); List addrTemp = new List(); if (op.FileName.Length1)/无选择文件,文件错误 FileFormat ff = new FileFormat(op.FileName); if (ff.FileExtension = txt) addrTemp = ff.MPPLReader(op.FileName); AddrList.Add(addrTemp); list_PlayList.Items.Add(Music.MusicName(op.FileName); AddrTemp = addrTemp; for (int i = 0; i = 0) AddrList.RemoveAt(list_PlayList.SelectedIndex); if (File.Exists(c: + list_PlayList.Itemslist_PlayList.SelectedIndex.ToString() + .txt) File.Delete(c: + list_PlayList.Itemslist_PlayList.SelectedIndex.ToString() + .txt); list_PlayList.Items.RemoveAt(list_PlayList.SelectedIndex); if (list_PlayList.Items.Count 0) list_PlayList.SelectedIndex = 0; private void 保存所有列表ToolStripMenuItem_Click(object sender, EventArgs e) FileFormat ff = new FileFormat(); for (int i = 0; i 0; i-) if (list_PlayList.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国联合居住社区商业模式与盈利路径研究报告
- 2025-2030中国眼科高值耗材带量采购影响与创新产品布局策略
- 2025-2030中国电子支付市场竞争格局与用户行为研究报告
- 2025-2030中国母婴用品行业渠道变革与品牌竞争战略分析报告
- 2025-2030中国智能仓储机器人降本增效路径分析
- 2025-2030中国智慧农业物联网设备渗透率与增产效益评估
- 2025-2030中国数据中心液冷技术成熟度评估与基础设施改造机会研究
- 书法家合作合同范本8篇
- 机关单位合同管理流程模板
- 2025榆林镁业(集团)有限公司招聘(9人)考试参考试题及答案解析
- 2025至2030年中国丁酮肟市场现状分析及前景预测报告
- 公司电脑补贴管理办法
- 中石化对供应商管理办法
- Unit 2 Home Sweet Home 语法与阅读专项练习 (含答案) 人教版(2024)八年级上册
- 2025年少先队应知应会知识竞赛考试题库及答案
- 【课件】第14章+全等三角形+数学活动++式+课件2025-2026学年人教版数学八年级上册
- 2025版安全生产法全文
- 2025年中远海运集团招聘笔试备考题库(带答案详解)
- 高中英语高考词汇200句-教师版(简单句80)二
- 《山居秋暝》(王维)测试题带答案
- 甲状腺肿瘤的早期诊断与治疗进展
评论
0/150
提交评论