![音乐播放器的设计与实现_第1页](http://file4.renrendoc.com/view/44bd266cca5cd2741dd97663b5036b46/44bd266cca5cd2741dd97663b5036b461.gif)
![音乐播放器的设计与实现_第2页](http://file4.renrendoc.com/view/44bd266cca5cd2741dd97663b5036b46/44bd266cca5cd2741dd97663b5036b462.gif)
![音乐播放器的设计与实现_第3页](http://file4.renrendoc.com/view/44bd266cca5cd2741dd97663b5036b46/44bd266cca5cd2741dd97663b5036b463.gif)
![音乐播放器的设计与实现_第4页](http://file4.renrendoc.com/view/44bd266cca5cd2741dd97663b5036b46/44bd266cca5cd2741dd97663b5036b464.gif)
![音乐播放器的设计与实现_第5页](http://file4.renrendoc.com/view/44bd266cca5cd2741dd97663b5036b46/44bd266cca5cd2741dd97663b5036b465.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓名)姓名)专业技术职称/学位)毕业设计说明书学生姓名学号学院计算机科学与技术学院专业计算机科学与技术(软件工程)题目音乐播放器的设计与实现指导教师摘要:随着生活水平的提高,娱乐已成为非常主流的话题,人们不仅需要通过音乐陶冶情操,而且越来越多的人倾向于使用音乐、视频等娱乐和放松自己,这大大促进了媒体软件的发展•本文旨在介绍研究常用数字音频编码和解码的相关知识,并结合VS2008编写多功能音乐播放器,了解音乐播放器功能的实现,掌握开发音乐播放器所需的相关知识,采用了面向对象软件工程方法,其开发主要包括应用程序界面设计和后台代码运行两个方面,实现了多功能音乐播放器在计算机上的应用,可以在很大程度上满足用户的需求•该系统主要具备:音乐播放控制、音乐文件控制、音量控制、下载控制、歌词控制、进度控制、音乐剪辑等功能模块。关键字:音乐播放器,音频编码格式,TechSmithScreenCaptureCodec,FFmpeg,C#,VisualStudio2008Abstract:Withtheimprovementofstandardsofliving,entertainmenthasbecomeverymainstreamtopics,itisrequirednotonlybymusic,edifying,andasmoreandmorepeopletendtousemusic,videoandotherentertainmentandrelax,whichgreatlypromotedthedevelopmentofmediasoftware.Thisarticleaimstointroducetheresearchknowledgeofcommondigitalaudioencodinganddecoding,andinconjunctionwithVS2008preparedmultifunctionalmusicplayer,understandthefunctionsofthemusicplayertoacquirerelatedknowledgeneededtodevelopmusicplayer,object-orientedsoftwareengineeringmethodsareused,theirdevelopmentincludestheapplicationinterfacedesignandcodetoruninthebackgroundtrackstorealizemultifunctionalmusicplayerapplicationonyourcomputer,youcantoalargeextent,meettheneedsofusers.Thesystemmainlyincludes:amusicplayer,musicfilecontrol,volumecontrol,control,control,schedulecontroloflyrics,musiceditingfunctionmodule.Keywords:musicplayer,audiocodingformat,techsmithscreencapturecodec,c#,visualstudio2008目录TOC\o"1-5"\h\z1前言-4-\o"CurrentDocument"1.1选题的背景及意义-5-\o"CurrentDocument"1.2网络流行音乐播放器简介-5-\o"CurrentDocument"2系统相关技术及开发平台介绍-6-\o"CurrentDocument"2.1开发应用技术介绍-6-\o"CurrentDocument"2.2开发及运行坏境-8-\o"CurrentDocument"3系统的分析-9-\o"CurrentDocument"3.1可行性分析-9-3.2常见的几种音频格式及其特点-10-3.3需求分析-11-4系统设计-13-4.1系统概要设计-13-4.2系统功能设计及描述-13-5系统功能实现-15-5.1歌曲添加模块-16-5.2歌曲列表模块-20-5.3播放控制模块-21-5.4音量控制模块-24-5.5进度控制模块-25-5.6滚动字幕模块-25-5.7歌曲下载模块-30-5.8歌曲剪辑模块-32-结论-36-参考文献-37-致谢-38-前言选题的背景及意义音乐是情感的艺术,美妙动听的音乐来源于情感,又潜移默化地影响情感,让我们进入瑰丽多彩的虚化与现实的意境之中。向上追溯百年或千年,直至最原始的音乐诞生之初,我相信音乐是为了倾诉而不是表现,是自然的流露而不是技巧的夸张,是自我的沉醉而不是别人的掌声。因为爱与感动,因为生命的圆满与缺憾,因为思想的灵动与创造。所以音乐不单在乐谱上,更在我们的心中。众所周知任何格式的音乐都要通过音乐播放软件播放,那么音乐播放软件是通过什么样的原理实现音乐的播放的呢?音乐播放器就是音频解码器的可视化操作界面,其实质是针对各种音频编码格式的解码器。例如APE格式调用的是Monkey'sAudio解码器,FLAC格式调用的是FLAC解码器,MP3调用的是lame解码器。大部分音乐播放器都支持多种音乐格式的文件,这是因为这些播放器将不同的音频解码器打包起来,并制作统一的播放界面,从而让使用者能够方便地播放和聆听各种音乐。伴随着改革开放人们的生活水平普遍提高如今音乐已成为越来越多人的心灵寄托。随着因特网在我国的普及随之而来的是各式各样的播放器软件。尽管未来的音乐播放器将具备各种丰富多彩的功能,但作为一款多媒体软件,音频应用才是最基本的,也是最能决定获取用户数量的因素。基于上述分析音质高,外形美观,小巧且功能强大是未来播放器发展的主流趋势。作为一个音乐爱好者兼软件工程专业的一员若能编写一款小巧功能强大的音乐播放器无疑是一件很有成就感的事情。网络流行音乐播放器简介本小节举例介绍目前网络上流行的几款音乐播放器,比如国产千千静听,酷狗音乐等。比较分析了它们各自特有的功能,此外还集中介绍了常见的几种编码格式以及它们各自的特点。千千静听千千静听是一款专为用户定制的全新一代的免费听歌下载音乐播放器软件。提供百万首歌曲免费试听下载,拥有最新、最流行的歌曲,提供第一时间音乐资讯;超高品质(320kbps)的音乐歌曲下载,给耳朵更优质的享受;超炫的智能语音搜歌功能让听歌更加快捷;免费的手机铃声歌曲下载;轻松拖拽歌词,保持歌词同步,支持边听边唱;支持在线播放下载;流量限额提醒功能。软件特色:1、高精度音质,完美还原听觉;2、在线自动下载歌词,卡拉OK式同步显示;3、软件小、运行快、支持众多插件,自由编辑歌词,由你做主;4、自由转换MP3、WMA,APE,WAV等多种音频格式,批量修改歌曲标签信息;5、个性化皮肤,多种视觉效果享受永远免费。酷狗音乐酷狗音乐是中国领先的数字音乐交互服务提供商,互联网技术创新的领军企业,致力于为互联网用户和数字音乐产业发展提供最佳的解决方案,公司的使命是成为亚太地区最大的数字音乐销售推广企业。自公司创建以来,一直在数字音乐发展上大胆尝试,先后与几十家唱片公司、版权管理机构合作探索发展,积累了数万首数字音乐版权,并在推动广范围的跨行业、跨平台合作上做出努力,在艰巨的全球音乐数字化进程中做出自身的贡献。全球最受欢迎的免费中文播放软件,流行音乐搜索平台。软件特色:1、迷你界面、界面更酷、绚丽流行;保持了WindowsVista和XP下的完美表现,让人耳目一新;2、卡拉0K酷狗独创“卡拉0K”歌词显示,多种模式,边听边唱,让你听歌更好玩;3、支持本地音乐播放完美音质,支持所有的音频文件,本地文件拖放,同时支持网络高速下载和本地播放;4、超强搜索和下载优化歌曲搜索引擎,提高搜索准确度;智能化节约带宽,可关闭网络功能;5、流行音乐资讯酷狗榜单家族、狗友推荐、酷吧、狗窝,最新流行音乐一网打尽,好听的音乐来“找”你;6、个性化手机炫铃DIY,让拥有张扬个性的铃声7、音频格式我选择我的歌曲我制作,音质音效我决定8、收音机动感音乐识别体验精选多家电台,收听全球风云变化,更能识别电台中的音乐。系统相关技术及开发平台介绍本系统是采用面向对象的软件开发方法,基于微软的VisualStudio.Net开发平台,以C#作为本系统的开发语言实现音乐播放器预定的需求功能。开发应用技术介绍TechSmithScreenCaptureCodec简介TechSmithScreenCaptureCodec是TechSmith公司开发的CamtasiaStudio的一个组件,用于压缩CamtasiaRecorder中的视频文件,最大的优点是可以保证图像的质量,截取的屏幕经过多次压缩,还能保证高质量。比传统的压缩方式相比,优势十分明显。CamtasiaStudio是TechSmith旗下一款专门录制屏幕动作的工具,无论在何种颜色模式下它都能轻松地对屏幕动作进行记录,包括声音、图像、鼠标的移动轨迹等。此外,它还能够对音频片段进行编辑、压缩、剪接从而实现多种音效的播放。它还能输出包括Flash(SWF/FLV)、AVI、WMV、M4V、CAMV、MOV、RM、GIF动画等多种常见格式,是制作视频演示的绝佳工具。其实CamtasiaStudio已不仅仅是一个录屏工具了,它包括了5个组件:Camtasia录像器、菜单制作器、音频编辑器、剧场及播放器。本播放器在运行之前需要安装TechSmithScreenCaptureCodec组件,此组件会和系统一起打包发行,用户也可以自己从网上下载更高版本的组件,只有安装此组件才能实现播放器中的歌词剪切功能。FFmpeg简介FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、MacOSX等。这个项目最早由FabriceBellard发起,现在由MichaelNiedermayer维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"FastForward"。使用本播放器如果要对flv格式的文件进行播放则要安装FFmpeg。VisualStudio.Net集成开发环境简介.NET平台为创建新一代分布式Web应用提供了所有工具和技术(表示技术、构件技术和数据库技术)。.NET平台支持标准的Internet协议,包括HTTP(超文本传输协议)、XML(可扩展标记语言)和SOAP(简单对象访问协议)等,从而实现了异构系统间应用程序的集成和通信,即用户和供应商可将在此平台上开发的产品和服务无缝地嵌入自身的业务进程和日常活动的信息架构中。.NET平台建立在开放系统结构基础之上,集Microsoft在软件领域的主要技术成就于一身。.NET平台包括一下4种核心技术:.NETFramework、.NET企业服务器、构件模块服务和VisualStudio.NET。.NETFramework是.NET平台核心中的核心,它为.NET平台下应用程序的运行提供基本框架,如果把Windows操作系统比作一幢摩天大厦的地基,那么.NETFramework就是摩天大厦中由钢筋和混凝土搭成的框架。.NET企业服务器是Microsoft为企事业单位提供的技术服务中的一部分,它包括MicrosoftBizTalkServer、MicrosoftCommerceServer、HostIntegrationServer、ExchangeServer、SQLServer等技术的开发工具包。构建模块服务主要是Microsoft提供的COM+组件服务和XMLWeb服务技术,利用构建模块服务开发应用程序模块,可以迅速地组装一个功能完备的软件。VisualStudio.NET是.NET平台的主要开发工具,由于.NET平台是建立在开放系统结构基础之上的,因此应用程序开发人员也可以使用其它开发工具。C#语言简介C#(#原为音乐标记,读Sharp)是一种面向对象的编程语言,主要用于开发可以运行在.NET平台上的应用程序。C#语言是微软公司开发的基于.NETFramework的一种编程语言,它继承了C/C++优良传统,又借鉴了Java的很多特点。微软对C#的定义是:“C#是从C和C++派生出来的一种简单、现代、面向对象和类型安全的编程语言。C#主要是从C/C++编程语言家族移植过来的,C和C++的程序员能够很快熟悉它。C#试图结合VisualBasic的快速开发能力和C++的强大灵活的能力。”⑵C#是2000年6月微软公司发布的一种全新编程语言,是由AndersHejlsberg和他的微软开发团队所设计,具体如下特点:•通用,支持跨平台。C#程序的客户端可以运行在不同类型的客户端上,如PDA、手机等PC装置。简单,主要体现在垃圾收集、指代等特性上。垃圾收集机制将减轻开发人员对内存的管理负担,而指代功能更是可以让开发者不经过内部类就调用函数。利用C#的这些功能,可以使开发者通过较少的代码来实现更强大的应用程序,并且能够更好地避免错误发生,从而缩短了应用系统的开发周期。•面向对象设计,C#具有封装、继承和多态等面向对象程序语言的特征。与Web应用紧密的结合,C#支持绝大多数的Web标准,如HTML、XML、SOAP等。这是C#最大的特点,使用它可以轻松开发各种企业级应用平台。安全性机制,消除软件开发中常见错误(如语法错误),.NET提供的垃圾回收器能够帮助开发者有效的管理内存资源。•兼容性,C#遵循.NET的公共语言规范(CLS),能够保证与其它语言开发组件兼容。•灵活的版本处理技术,C#在语言本身内置了版本控制功能,开发人员可以更加容易地开发和维护。C#提供了完善的错误和异常触发机制。开发及运行坏境硬件平台:CPU奔腾双核(主频2.0GHz)内存1G32位PC机160G硬盘软件平台:操作系统:WindowsXP\Win7\Win8开发工具:VisualStudio2008。本软件占用系统空间小,能满足用户对常见音频格式文件的播放要求,还具有歌曲、歌词下载等功能,界面美观交互性好,易于用户理解操作,且不依赖于其它软件,消耗资源少易维护,程序有较好的健壮性和正确性。运行该软件所需的坏境配置不高,能满足绝大多数用户的需求。系统的分析可行性分析可行性研究(feasibilitystudy)的目的,是弄清楚待开发的项目是不是可能实现和值得进行,通常由系统分析员完成,并需写出可行性论证报告。如结论认为可行,即可制定项目实施计划,同时开始软件开发;如结论认为不可行,则应提出终止该项目的建议。可行性论证其实是在高层次上进行的一次大大简化了的需求分析与设计。但它的目的不是去解决用户提出的问题,仅是确定这项开发是否值得进行,分析它存在哪些风险。换句话来说,在投入大量精力前研究成功的可能性,减小可能出现的风险。即使研究的结论是不值得进行,所花的精力也并不浪费,因为它避免了一次更大的浪费。下面我们将根据本系统的特点具体描述以下可行性分析。[3]经济可行性开发一个基于计算机的系统主要是为了获取较好的经济效益和社会效益。因此对待开发系统的经济可行性论证就成为可行性研究的重要内容。成本-效益分析可用于评估系统的经济合理性,给出系统开发的成本估算,并将估算的成本与获得的利润进行比对,从经济的角度论证待开发系统是否可行。一般来说,基于计算机系统的成本主要由4部分组成:购置并安装软硬件及有关设备的费用。系统开发费用。系统安装、运行和维护费用。人员培训费用。结合毕业设计的整个开发过程可知开发音乐播放器所需的全部软件平台都是免费的,所以在经济上是完全可行的。技术可行性技术可行性是可行性研究的关键内容。由于系统分析和定义过程与系统技术可行性评估过程同时进行,此时系统的功能、性能和目标的不确定性会给技术可行性论证带来许多困难。因此,技术可行性研究往往是系统开发过程中难度最大的工作。该音乐播放器是用C#语音开发的,调试比较简单,所需的计算机硬件配置要求不高,一般PC机完全能满足开发要求。软件方面:基于微软.net开发平台使用C#面向对象的编程语音,它开发速度快,简单易用,技术成熟,软件也容易从网上获得,完全能满足开发需求。法理可行性法律可行性主要研究新系统的开发和使用是否会侵犯他人权益,是否触犯了国家的法律法规。本次的毕业设计是由本人独立完成,开发的系统不会侵犯任何人的权益,所用的软件都是通过合法途径获取,因此完全符合法律法规。综上所述,本系统的开发从经济上、技术上、法律上都是完全可行的。常见的几种音频格式及其特点MP3格式:MP3的全称是MovingPictureExpertsGroupAudioLayerIII。MP3是Fraunhofer-IIS研究所的杰出成果。在MP3出现前,以有损方式进行音频编码最好的效果能够压缩到4:1。而强大的MP3可以实现12:1的高压缩比,正是因为这种性能的巨大提升,并且在实现高压缩比的同时还能够保持较好的音质,所以使得MP3迅速地流行起来。MP3是世界上第一个实用化的有损压缩编码方案,几乎所有的播放软件都支持它,也曾今产生了许多第三方的编码工具。MP3编码质量分为:固定码率(CBR),平均码率(ABR)和动态码率(VBR)。⑷特点:音质好,压缩比比较高,被大量软件和硬件支持,应用广泛。WMA格式:WMA就是WindowsMediaAudio编码后的文件,它是微软公司推出的与MP3格式齐名的一种新的音乐格式。WMA在压缩比和音质方面都超过了MP3,更是远胜于RA(RealAudio),即使在较低的采样频率下也能产生较好的音质。WMA针对的不是单机市场,而是网络!竞争对手就是网络媒体市场中著名的RealNetworks。WMA格式有非常高的压缩率,一般为1:18,因此它的文件所占空间比相应的MP3文件少一半。这是通过提高音质、减少数据流量的方法来实现更高的压缩率的。此外它还有很强的防盗版功能。特点:低码率下的音质表现难有对手。[4]WAV格式:WAV是微软Windows系统本身自带的音频格式,因为Windows系统的普及性,此格式已经成了当前最主流的音频格式之一。WAV文件里面存放的每一块数据都有自己独立的标识,通过这些标识可以告诉用户究竟是什么数据。WAV格式的设计非常灵活,该格式本身与任何媒体数据都不冲突,只要有软件支持,我们甚至可以在WAV格式里面存放图像。在Windows平台上,通过ACM结构及相应的驱动程序,例如CODEC编码/解码器,可以在WAV文件中存放超过20种的压缩格式,比如ADPCM、GSM、CCITTG711、G.723和MP3等。[4]特点:音质非常好,被大量软件所支持。RA格式:RA格式是RealNetworks公司所开发的一种新型流式音频RealAudio文件格式。这是网上接触得非常多的一种格式,大部分音乐网站的在线试听都采用了RealAudio,这种格式完全针对的就是网络上的媒体市场,支持非常丰富的功能。最大的优点就是这种格式可以根据听众的带宽来控制自己的码率,在保证流畅的前提下尽可能提高音质。[4]特点:码率可控,支持多种音频编码,可边读边放。需求分析软件需求是指用户对目标软件系统在功能、性能、行为、设计约束等方面的期望。需求分析就是通过对应用问题及其坏境的分析与理解采用一系列的分析方法和技术将用户的需求逐步精确化、完全化、一致化,最终形成需求规模说明文档的过程。本节将从不同的角度描述系统的需求。播放器的基本控制需求在着手开发系统之前首先要明确该系统应该实现的一些最基本的功能,然后逐步细化,为每个功能创建一个模块,再对各个模块进行开发。通过分析我们得出一款音乐播放器的基本控制如图3-1所示:
歌曲添加播放暂停下一曲音量控制歌曲下载歌词显示进度控制上一曲歌曲添加播放暂停下一曲音量控制歌曲下载歌词显示进度控制上一曲图3-1播放器基本控制图功能需求功能需求规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。功能需求有时也被称作行为需求(behavioralrequirement),因为习惯上总是用“应该”对其进行描述。功能需求描述是开发人员需要实现什么。功能需求定义一个软件系统或组件的功能,也是一个系统需提供的功能及服务。功能可以用一组输入、行为及输出的组合来表示。功能需求可以是计算、技术细节、数据处理或其他说明系统希望达成功能的内容。功能需求会以非功能性需求(或是质量需求)为其基础。结合音乐播放器所要实现的内容,我们列出用户操作的模块,其中每个模块对应一个功能。用户启动程序进入主界面,用户可以通过添加模块添加本地歌曲,可以一首一首添也可以添加整个歌曲文件夹。通过播放列表用户可以实现对歌曲的查找、播放、暂停、音量调节、静音。通过歌词模块可以实行歌曲歌词的显示、比对、歌词字体选择。此外用户还可以联网下载歌词、歌曲。其功能模块时序图如下3-2所示:系统设计系统概要设计在需求明确、准备开始编码之前,要做概要设计。概要设计的主要任务是把需求分析得到的DFD转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的设计。概要设计有多种方法。在早期有模块化方法、功能分解方法;在60年代后期提出了面向数据流和面向数据结构的设计方法;近年来又提出面向对象的设计方法等。本系统采用模块化软件设计,自顶向下逐层把软件系统划分成若干模块。每个模块完成一个特定的功能,最后将所有模块按照某种方法组合成一个整体,达到整个播放器所要求的功能。系统功能设计及描述本音乐播放器不仅要实现对一些常见的音频格式文件的播放,而且还要有友好的用户界面。其最终设计目标是:实现对多种音频格式文件的播放、实现对歌词的滚动播放及当前播放曲目长度显示、显示歌曲文件信息、实现静音和音量控制;播放器软件占用系统资源少、运行平台要求不高、界面美观舒适、操作简单、易维护、高稳定性、,能满足用户的常见需求。主要划分为以下七个功能模块,每个功能模块的作用描述如下:>播放控制:控制歌曲的播放状态,如:播放、暂停、上一曲、下一曲。播放过的歌曲按播放顺序排列在播放列表中,每次退出程序、重启播放器后播放列表中的播放记录会自动保存不会清空。>文件控制:主要用来打开本地播放文件。通过研究音频编码解码的相关技术,了解音频编码解码的原理和过程,本音乐播放器支持常见音频格式文件播放如:MP3、WMA、WAV等。可以单个曲目添加,也可以将整个文件夹中的曲目全部添加,实现歌曲文件添加的多样化;此外还可以对播放列表进行清空,对曲目的播放顺序进行控制;当播放列表中曲目过多时,可以从播放列表中快速搜索到需要播放的歌曲。还有对播放列表进行控制如:打开文件所在目录、移除列表、删除文件、显示歌曲文件的相关信息如:歌手、专辑等。>歌词控制:播放音乐时控制是否显示歌曲歌词,若歌词存在则同步滚动显示歌词,若歌词不存在则可联网下载歌词。此外还可以对歌词字体进行设置。>进度控制:显示当前歌曲的播放总时长和已播放时长,可以通过鼠标调整歌曲的播放进度,实现歌曲的跳跃式播放。其实现方式是通过进度条和时间的同步显示。>声音控制:调整歌曲音量的大小,显示是否静音。>下载控制:可以联网下载自己喜欢的歌曲、歌词。若不知道歌曲名称则可以按歌手名查找歌曲下载,若知道歌曲名则可直接输入名称进行下载,可以在下载进度列表中查看下载状态。>音乐剪切:对音乐文件进行剪切。添加当前路径,对想要的歌曲进行播放,在歌曲播放过程中你可以在任何地方设置一个起点,然后,再设置一个终点。“试听歌曲”就是把你选出来的这一段播放一遍,看是不是你要的那一段,有时候可以早开始了几秒或者早结束了几秒,这个时候可以直接在起点和终点的地方进行调整。然后在这个窗口的上面有个“保存歌曲”,就可以把你选出来的这段音乐保存起来了。我们可以通过歌曲剪切功能截取自己喜欢的音乐片段,来做为自己的手机铃声。其具体功能模块如图4-1所示:
歌词歌字词体比设对置图4-1音乐播放器功能模块图系统功能实现根据上一章对系统各个模块的分析,本节主要讲述如何具体实现这些模块功能。几乎所有的Windows程序都离不开窗体,Windows窗体应用程序是Windows下进行软件开发的基础。在C#中,通过VisualStudio2008开发平台模版,可以自动生成多种基于Windows的应用程序框架,主要包括基于.NETFramework的Windows窗体应用程序、Windows服务应用程序。最常用的是Windows窗体应用程序。在Windows窗体应用程序中,有窗体(Form)和控件(Contro1)两个基本概念。窗体是控件的容器,控件是应用程序显示数据或接受数据输入的相对独立的用户界面元素。.NET类库提供了丰富的窗体相关类,包括窗体、按钮、状态栏、工具栏、菜单、文本框、列表等多种不同的界面元素;此外还提供各种控件、组件、容器。通过这些界面元素的不同组合,可以设计出友好的用户界面。对于软件开发中要用到的图片可以自己绘制,相关控件可以调用类库,从而设计出外形美观的界面。但这也做相当费时,由于毕业设计的时间有限,图片都从网上下载,并做稍微处理,所以美观方面有一定欠缺,待以后有时间慢慢改进。此外界面是由窗体、控件拖放组成,大部分代码由视图设计器自动生成,无需太多改动,因此这一部分不再详细阐述,下面将主要介绍主要功能模块的核心代码实现。歌曲添加模块很多的应用程序都有打开文件功能,本程序使用OpenFi1eDia1og组件,用来打开本地磁盘上的一个或多个文件,并添加到文件播放列表中。添加歌曲文件为了赶上社会的潮流,我们经常会从网上下载最热门的音乐,本模块功能就是实现添加本地歌曲或已下载到电脑的最新歌曲到播放列表,同时更新播放列表,使我们能及时欣赏到自己喜欢的音乐。其具体代码如下:privatevoidAddSong_Click(objectsender,EventArgse){ofd.Filter二"音乐文件(*.wmv,*.mp3,*.wav)|*.wmv;*.mp3;*.wav||Allfiles(*.*)|*.*";ofd.InitialDirectory=Application.StartupPath;ofd.FileName="";ofd.RestoreDirectory=false;ofd.Title="添加音乐文件";if(ofd.ShowDialog()==DialogResult.OK){stringstrLongPath=ofd.FileName;WriteFileByLongPath(strLongPath);}privatevoidWriteFileByLongPath(stringstrLongPath){intb=strLongPath.LastIndexOf("\\");stringstrShortPathWithExtension=strLongPath.Substring(b+1);StreamWritersw=newStreamWriter("list.ini",true);stringextension=strShortPathWithExtension.Substring(strShortPathWithExtension.Length-3);if(extension.ToLower()=="wmv"||extension.ToLower()=="mp3"||extension.ToLower()=="wav"){stringstrShortPathWithoutExtension=strLongPath.Substring(b+1,strShortPathWithExtension.Length-4);Mp3mp3=newMp3(strLongPath);if(!(String.IsNullOrEmpty(mp3.Artist)||String.IsNullOrEmpty(mp3.Title))){//获取成功的结果(歌手名-歌曲名)strShortPathWithoutExtension=mp3.Artist.Trim()+"-"+mp3.Title.Trim();}//否则原文件名if(!this.myListBox.Items.Contains(strShortPathWithoutExtension)){//不包含songList.Add(strShortPathWithoutExtension);Imageimage=getImageByArtistOrSongName(mp3.Artist,strShortPathWithoutExtension);imageList.Add(image);this.myListBox.Items.Add(strShortPathWithoutExtension);this.myListBox.songList=songList;this.myListBox.imageList=imageList;sw.WriteLine(strShortPathWithoutExtension);sw.WriteLine(strLongPath);//写入全路径}}sw.Flush();sw.Close();}5.1.2添加歌曲文件夹当我们要欣赏歌曲专辑时,可能要添加的文件比较多,显然单曲添加比较麻烦,这时我们就可以使用OpenFileDialog组件的Multiselect属性和Filenames属性实现整个文件夹的添加,同时更新播放列表。代码如下:privatevoidtsmiAddSongFolder_Click(objectsender,EventArgse){if(fbd.ShowDialog()==DialogResult.OK){stringstr=fbd.SelectedPath;DirectoryInfor=newDirectoryInfo(str);GetAllFiles(r);}}publicvoidGetAllFiles(DirectoryInfodir){FileSystemInfo[]fileinto=dir.GetFileSystemInfos();foreach(FileSystemInfoiinfileinto){if(iisDirectoryInfo){GetAllFiles((DirectoryInfo)i);}else{stringstrLongPath=i.FullName;WriteFileByLongPath(strLongPath);}}}privatevoidtsmiSearch_Click(objectsender,EventArgse){if(this.mySearchPanel.boolSearchShow){//已经打开,则关闭this.mySearchPanel.close();}else{this.mySearchPanel.boolSearchShow=true;this.mySearchPanel.lb=this.myListBox;this.mySearchPanel.copyValueList();}initialSearchPanel();添协音乐文科:.«血卜Debug►songT好I蹬箕8宙A—-J—-3--#箱创托的艺耒B輙轲胡底臥-童话生“2+EJLSU冋图片®董小琥-砂目然,”3董琥®-梦屋时分…St迅事卞我斬梁-问.mpH9问Mn』旨乐®迥歩神税园”mp32DownByTheSalleyGa...JoanieMadder丹计算机三爲本垃鑑盘(C:).1TOOLS(D:)―DATA〔叩.iBACKUP(F:j/1pur文伴呂四:醪神秘回,EpS音乐文件L.mpSrwnmCiffav)〒取消打幵回取消图5-1打开文件5.2歌曲列表模块播放列表主要用来显示要播放歌曲的信息,如歌手、照片、曲名。在这里我们使用ListBox控件来实现相关功能。详细代码如下:this.myListBox.Anchor=((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top|System.Windows.Forms.AnchorStyles.Bottom)|System.Windows.Forms.AnchorStyles.Left)));this.myListBox.DrawMode=System.Windows.Forms.DrawMode.OwnerDrawVariable;this.myListBox.FormattingEnabled=true;this.myListBox.Location二newSystem.Drawing.Point(2,115);this.myListBox.Name=""myListBox"";this.myListBox.Size=newSystem.Drawing.Size(302,354);this.myListBox.Tablndex=0;this.myListBox.MouseDown+=newSystem.Windows.Forms.MouseEventHandler(this.myListBox_MouseDown);
privatevoidmyListBox_MouseDown(objectsender,MouseEventArgse){if(this.myListBox.thisIndex!=-1){if(e.Button二二System.Windows.Forms.MouseButtons.Right){this.myListBox.ContextMenuStrip=this.cmsListBox;}}}4梁静茹-间4梁静茹-间1ft小谦-站一顺其自婕2Ju:inieMaiiden-DliwtlEyTheS:=lL1eyG:±fiierLZ3架靜茹-梦睡时分E'A1estli£e-MyLove61+1卓克童'T组合-等畫走了以启85503.Com參勢葛品质音乐网-5583.Com缪整SMariakrredondo晋持英诸听力爰-Burnin.g10NobodyWonder<rirl511耳七冉也浚有像找毘祥的人了呼12划若央-听说Y13林俊杰-畫不合绝迹14加木年华-完美世界王题曲15kkonft.®玮柏-Ba彷th.Ton16胡眈-為月的南n讦茹丢-—帘幽梦18阿桑-寂苒在唱談19云◎泣-羞泪20传奇21Zacure-養折兰画眉口驾曲录音盈槛外的卿藏(许茹芸齐-05独角啟23加勒比洱益-he11sa.pirate74因誰一匚口FiVihntmR1up图5-2播放列表5.3播放控制模块播放是音乐播放器最重要的功能。本程序使用WindowsMediaPlayer命名空间中定
义的属性和方法来实现歌曲的播放、暂停、上下去切换等。其核心代码如下:privatevoidinitialBtn(){if(playStatue==MediaPlayer.PlayStatue.播放){//正在播放,暂停图片btnPlay.Image=Image.FromFile("pic\\pause.bmp");}elseif(playStatue二二MediaPlayer.PlayStatue.暂停||playStatue==MediaPlayer.PlayStatue.停止){//开始播放图片btnPlay.Image=Image.FromFile("pic\\play.bmp");}if(this.boolVolumn){this.btnVolumn.Image=Image.FromFile("pic\\02.gif");}elsethis.btnVolumn.Image=Image.FromFile("pic\\01.gif");}privatevoidnextSongPlay(){//下一曲if(playStyle==MediaPlayer.PlayStyle.随机播放){//选择随机播放时就产生一个随机数组,播放记录,根据数组,上一曲下一曲都有用if(randomIndex+1>=randomList.Count){randomSongPlay();}elsethis.myListBox.doubleClickIndex=(int)randomList[++randomIndex];}elseif(playStyle==MediaPlayer.PlayStyle.顺序播放){this.myListBox.doubleClickIndex++;if(this.myListBox.doubleClickIndex>=this.myListBox.Items.Count){playStatue=MediaPlayer.PlayStatue.停止;this.myListBox.doubleClickIndex=this.myListBox.Items.Count-1;stop();initialBtn();return;}}else{//下一曲,如果到底,将播放第一首歌曲,全部循环this.myListBox.doubleClickIndex++;if(this.myListBox.doubleClickIndex>=this.myListBox.Items.Count){//转第一首this.myListBox.doubleClickIndex=0;}}btnChangeSong();initialBtn();}privatevoidlastSongPlay(){if(playStyle==MediaPlayer.PlayStyle.随机播放&&randomindex>=1){this.myListBox.doubleClickIndex=(int)randomList[--randomIndex];}elseif(playStyle==MediaPlayer.PlayStyle.顺序播放){this.myListBox.doubleClickIndex--;if(this.myListBox.doubleClickIndex<=-1){this.myListBox.doubleClickIndex=0;playStatue=MediaPlayer.PlayStatue.停止;stop();initialBtn();return;}}else{this.myListBox.doubleClickIndex--;if(this.myListBox.doubleClickIndex<=-1){//转最后一首this.myListBox.doubleClickIndex=this.myListBox.Items.Count-1;}}btnChangeSong();}音量控制模块通过调节音量大小来达到歌曲播放的最佳状态。可以调用API函数SENDMESSAGEAPPCOMMAND_VOLUME_MUTE和TrackBar类来实现音量控制。代码如下:privatevoidbtnVolumn_Click(objectsender,EventArgse){IniUtility.FilePath=Application.StartupPath+"\\INI.ini";if(this.boolVolumn){player.setAudioOnOff("off");this.boolVolumn=false;IniUtility.WriteIniKey("Player","boolVolumn","0");}else{player.setAudioOnOff("on");this.boolVolumn=true;IniUtility.WriteIniKey("Player","boolVolumn","1");}initialBtn();}privatevoidmyTBVolumn_Scroll(objectsender,EventArgse){IniUtility.FilePath=Application.StartupPath+"\\INI.ini";intvalue=this.myTBVolumn.Value;player.SetVolume(value);IniUtility.WriteIniKey("Player","Volume",value.ToString());}进度控制模块进度控制用来显示歌曲的播放进度,也可以通过鼠标拖动实现歌曲的任意播放,通过把当前播放长度和进度条同步结合起来实现。此外还能够显示歌曲的播放时长,这是通过Timer组件的Tick事件实现。其主要代码如下:privatevoidmyTBPlayProcess_MouseDown(objectsender,MouseEventArgse){player.setPlayPosition(this.myTBPlayProcess.Value);this.lblTime.LblCurSecond=this.myTBPlayProcess.Value;}privatevoidchangeCurSecond(intvalue){this.myTBPlayProcess.Value=value;this.showLrc.curPlayTimeSecond=value;}滚动字幕模块有很多音乐播放器都可以实现一边听音乐一边看歌词的功能,这样做可以帮助用户更好地欣赏音乐,同时还可以强化对歌词的记忆进而达到背诵,为听者以后独唱歌曲做铺垫。此外还可以对歌词字体进行设置,从而达到视觉和听觉的双重享受。其核心代码如下:publicpartialclassShowLrc:Form{//歌词文件名就是ListBox中项的名称publicShowLrc(){InitializeComponent();privateFontfont=newFont("华文行楷",25.0f,FontStyle.Bold);publicintcurPlayTimeSecond=0;//lblTime传递过来播放的秒数(用于歌词提前和延后),因为有时候获取时间不准确publicboolisPlay=false;privatevoidShowLrc_Load(objectsender,EventArgse){initialBtn();}publicvoidinitial(){graphics=this.CreateGraphics();time.Interval=100;time.Tick+=newEventHandler(time_Tick);initialINI();}voidtimer_Tick(objectsender,EventArgse){clearPanel();if(string.IsNullOrEmpty(strLrcContext)){drawString(“未找到歌词");}else{drawString(regc(curPlayTimeSecond));}}publicvoidclearContext(){curFileName="";subgc=null;mylist.Clear();}privatevoidclearPanel(){graphics.Clear(Color.Maroon);}privatevoidsplit(){subgc=strLrcContext.Split(newchar[]{'[',']','\r','\n'});//subgc存儲歌詞文件中所有的时间信息和歌词//使用正则表达式判断时间格式提取出时间信息,并进行排序for(inti=0;i<subgc.Length;i++){if(Regex.IsMatch(subgc[i],〃八([01][0-9]|2[0-3]):[0-5][0-9].[0-9][0-9]$〃)||Regex.IsMatch(subgc[i],〃,[01][0-9]|2[0-3]):[0-5][0-9]$〃))//是否匹配{stringtemp=subgc[i];mylist.Add(subgc[i]);}}for(inti=0;i<mylist.Count-1;i++){for(intj=i;j<mylist.Count;j++){if(string.Compare(mylist[i].ToString(),mylist[j].ToString())>0){stringtemp;temp=mylist[i].ToString();mylist[i]=mylist[j];mylist[j]=temp;}}}privatevoidreadLrc(){if(curFileName==string.Empty)return;lrcPath=string.Format("lrc\\{0}.lrc",curFileName);if(!File.Exists(lrcPath)){strLrcContext="";return;}FileStreamfs=newFileStream(lrcPath,FileMode.Open);StreamReadersr=newStreamReader(fs,Encoding.UTF8);strLrcContext=sr.ReadToEnd();sr.Close();fs.Close();split();}privatestringregc(intstrTimeSecond){stringtemptime=secToMin(strTimeSecond);intk;for(k=0;k<mylist.Count;k++){if(string.Compare(temptime,mylist[k].ToString().Substring(0,5))<0)if(k<mylist.Count&&k>=1){stringtempsj=mylist[k-1].ToString().Substring(0,5);//歌词的时间,查找时间显示歌词intindex=strLrcContext.IndexOf(tempsj);intlength=strLrcContext.Substring(index).IndexOf("]")+1;index+=length;while(strLrcContext[index]=='['){index+=length+1;}intl=strLrcContext.Substring(index).IndexOf('[');if(l<=0){.〃〃return"";}returnstrLrcContext.Substring(index,l);}}}.〃〃return"";}privatestringsecToMin(intseconds){inttempminute=seconds/60;stringminute=tempminute.ToString();inttempsecond=seconds%60;stringsecond=tempsecond.ToString();if(tempminute<10)privatevoidbuttonl_Click(objectsender,EventArgse){IniUtility.FilePath=Application.StartupPath+""\\INI.ini"";ColorDialogcolorDialog=newColorDialog();colorDialog.Color=foreColor;if(colorDialog.ShowDialog()==DialogResult.OK){foreColor=colorDialog.Color;drawString(regc(curPlayTimeSecond));IniUtility.WriteIniKey("ShowLrc",""FontColor",foreColor.Name);}}:寅厂堰-03.11?其自慕:寅厂堰-03.H?其自慕2爭靜茹_容瞩盼3JoanieMalilen-IicuvnByTheS:±lLe)rG:进dens搜索臓下翩表劭曲名歌手名下融n04梁静茹-何谁会让你偶尔想要拥他在怀中图5-3滚动歌词5.7歌曲下载模块有时我们播放的歌曲没有歌词,这时我们就可以通过联网下载歌词,还可以下载自己喜欢的歌曲。实现代码如下:privatevoidbtnSearch_Click(objectsender,EventArgse){this.lblErrorMsg.Text二;if(txtTitle.Text.Trim()==〃“){this.lblErrorMsg.Text=〃请填写完整〃;return;}else{//信息完整//启动多线程,防止假死现象try{AsyncCallbackcallback=newAsyncCallback(this.AsyncCallBackImpl);getSongWord.BeginInvoke(this.txtTitle.Text.Trim(),this.txtArtist.Text.Trim(),callback,null);this.lblErrorMsg.Text="正在搜索请稍等";}catch(Exceptionex){this.lblErrorMsg.Text="未搜索到相关歌词";}}}privatedelegatevoidbeginInvokeDelegate(DataTabledt);privatevoidAsyncCallBackImpl(IAsyncResultar){DataTabledt=getSongWord.EndInvoke(ar);if(dt==null||dt.Rows.Count==0){this.lblErrorMsg.Text="未搜索到相关歌词";return;}this.lblErrorMsg.Text="搜索成功";this.dgvSongLrc.BeginInvoke(newbeginInvokeDelegate(dataBind),dt);//dataBind(dt);
}privatestaticDataTablegetSong(stringsongName,stringsingerName){Lrclrc=newLrc();returnlrc.getSongWord(songName,singerName);}privatevoiddataBind(DataTabledt){this.dgvSongLrc.DataSource=dt;}}歌曲信息:梁静茹-问搜索下载关闭歌曲信息:梁静茹-问搜索下载关闭图5-4歌曲下载5.8歌曲剪辑模块一个好的播放器不仅能够播放各种格式的铃声还能对音乐文件进行剪辑,使用户能够制作自己喜欢的铃声。此功能要用到TechSmithScreenCaptureCodec组件,核心代码如下:partialclassMusicCuteprivateSystem.ComponentModel.IContainercomponents=null;protectedoverridevoidDispose(booldisposing){if(disposing&&(components!=null)){components.Dispose();}base.Dispose(disposing);}#regionWindowsFormDesignergeneratedcodeprivatevoidInitializeComponent(){System.ComponentModel.ComponentResourceManagerresources=newSystem.ComponentModel.ComponentResourceManager(typeof(MusicCute));this.btnOpen.Location=newSystem.Drawing.Point(43,171);this.btnOpen.Name="btnOpen";this.btnOpen.Size=newSystem.Drawing.Size(75,23);this.btnOpen.TabIndex=0;this.btnOpen.Text="打开歌曲";this.btnOpen.UseVisualStyleBackColor=true;this.btnMake.Location=newSystem.Drawing.Point(327,171);this.btnMake.Name="btnMake";this.btnMake.Size=newSystem.Drawing.Size(75,23);this.btnMake.TabIndex=1;this.btnMake.Text="制作";this.btnMake.UseVisualStyleBackColor=true;this.btnMake.Click+=newSystem.EventHandler(this.btnMake_Click);this.btnSetStart.Location=newSystem.Drawing.Point(139,171);this.btnSetStart.Name="btnSetStart";this.btnSetStart.Size=newSystem.Drawing.Size(75,23);this.btnSetStart.TabIndex=2;this.btnSetStart.Text="设置起点";this.btnSetStart.UseVisualStyleBackColor=true;this.btnSetStart.Click+=newSystem.EventHandler(this.btnSetStart_Click);this
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年别墅建设合同范例
- 2025年农村道路安全改善工程合同
- 2025年企业食堂经营承包合同
- 2025年二手车交易双方性权益保障协议书
- 2025年医疗康复人才交流策划协议
- 2025年交通供电检测装备项目申请报告
- 2025年二手房产交易合同额外补充协议
- 2025年海洋台站仪器项目提案报告
- 2025年度学生权益保障协议书
- 2025年太阳能热电站交易合同模板
- 2023高考数学艺考生一轮复习基础讲义(学生版)
- 2MW-5MWh微网储能项目整体技术方案设计
- 围手术期中医护理
- 国测省测四年级劳动质量检测试卷
- 客车交通安全培训课件
- 《地表水环境质量标准》
- 人教版一年数学下册全册分层作业设计
- 幼儿羽毛球培训课件
- 人类学田野调查教学课件
- 辽宁省冷链物流行业报告
- 清洁氢能生产与输储技术创新
评论
0/150
提交评论