1、滨江学院移动通信程序设计课程设计 题 目 基于Android系统音乐播放器 院 系 滨江学院 专 业 计算机科学和技术 学生姓名 王 兵 学 号 2308057 二 一 四 年 六 月 十 日 摘要 伴随生活水平提升,娱乐已成为很主流话题,大家不仅需要经过音乐陶冶情操,而且越来越多人倾向于使用音乐、视频等娱乐和放松自己,这大大促进了媒体软件发展.本文意在介绍研究常见数字音频编码和解码相关知识,并结合VS编写多功效音乐播放器,了解音乐播放器功效实现,掌握开发音乐播放器所需相关知识,采取了面向对象软件工程方法,其开发关键包含应用程序界面设计和后台代码运行两个方面,实现了多功效音乐播放器在计算机上应
2、用,能够在很大程度上满足用户需求.该系统关键含有:音乐播放控制、音乐文件控制、音量控制、下载控制、歌词控制、进度控制、音乐剪辑等功效模块。关键字:音乐播放器,音频编码格式,TechSmith Screen Capture Codec,FFmpeg ,C#,Visual Studio 目 录1序言- 4 -1.1选题背景及意义- 4 -1.2网络流行音乐播放器介绍- 4 -2系统相关技术及开发平台介绍- 5 -2.1开发应用技术介绍- 5 -2.2开发及运行坏境- 7 -3系统分析- 8 -3.1可行性分析- 8 -3.2常见多个音频格式及其特点- 9 -3.3需求分析- 10 -4系统设计-
3、12 -4.1系统概要设计- 12 -4.2系统功效设计及描述- 12 -5系统功效实现- 14 -5.1歌曲添加模块- 15 -5.2歌曲列表模块- 19 -5.3播放控制模块- 20 -5.4音量控制模块- 23 -5.5进度控制模块- 24 -5.6滚动字幕模块- 24 -5.7歌曲下载模块- 29 -5.8歌曲剪辑模块- 31 -结 论- 35 -参 考 文 献- 36 -致谢- 37 -1序言 1.1选题背景及意义音乐是情感艺术,美妙动听音乐起源于情感,又潜移默化地影响情感,让我们进入瑰丽多彩虚化和现实意境之中。向上追溯百年或千年,直至最原始音乐诞生之初,我相信音乐是为了倾诉而不是表
4、现,是自然流露而不是技巧夸张,是自我沉醉而不是她人掌声。因为爱和感动,因为生命圆满和缺憾,因为思想灵动和发明。所以音乐不单在乐谱上,更在我们心中。众所周知任何格式音乐全部要经过音乐播放软件播放,那么音乐播放软件是经过什么样原理实现音乐播放呢?音乐播放器就是音频解码器可视化操作界面,其实质是针对多种音频编码格式解码器。比如APE格式调用是Monkeys Audio解码器,FLAC格式调用是FLAC解码器,MP3调用是lame解码器。大部分音乐播放器全部支持多个音乐格式文件,这是因为这些播放器将不一样音频解码器打包起来,并制作统一播放界面,从而让使用者能够方便地播放和聆听多种音乐。伴伴随改革开放大
5、家生活水平普遍提升现在音乐已成为越来越多人心灵寄托。伴随因特网在中国普及随之而来是各式各样播放器软件。尽管未来音乐播放器将含有多种丰富多彩功效,但作为一款多媒体软件,音频应用才是最基础,也是最能决定获取用户数量原因。基于上述分析音质高,外形美观,小巧且功效强大是未来播放器发展主流趋势。作为一个音乐爱好者兼软件工程专业一员若能编写一款小巧功效强大音乐播放器无疑是一件很有成就感事情。1.2网络流行音乐播放器介绍本小节举例介绍现在网络上流行几款音乐播放器,比如国产千千静听,酷狗音乐等。比较分析了它们各自特有功效,另外还集中介绍了常见多个编码格式和它们各自特点。1.2.1千千静听千千静听是一款专为用户
6、定制全新一代无偿听歌下载音乐播放器软件。提供百万首歌曲无偿试听下载,拥有最新、最流行歌曲,提供第一时间音乐资讯;超高品质(320kbps)音乐歌曲下载,给耳朵更优质享受;超炫智能语音搜歌功效让听歌愈加紧捷;无偿手机铃声歌曲下载;轻松拖拽歌词,保持歌词同时,支持边听边唱;支持在线播放下载;流量限额提醒功效。 软件特色:1、高精度音质,完美还原听觉 ;2、在线自动下载歌词,卡拉OK式同时显示 ;3、软件小、运行快、支持众多插件,自由编辑歌词,由你做主;4、自由转换MP3、WMA,APE,WAV等多个音频格式 ,批量修改歌曲标签信息;5、个性化皮肤,多个视觉效果享受永远无偿。1.2.2酷狗音乐酷狗音
7、乐是中国领先数字音乐交互服务提供商,互联网技术创新领军企业,致力于为互联网用户和数字音乐产业发展提供最好处理方案,企业使命是成为亚太地域最大数字音乐销售推广企业。自企业创建以来,一直在数字音乐发展上大胆尝试,前后和几十家唱片企业、版权管理机构合作探索发展,积累了数万首数字音乐版权,并在推进广范围跨行业、跨平台合作上做出努力,在艰巨全球音乐数字化进程中做出本身贡献。全球最受欢迎无偿汉字播放软件,流行音乐搜索平台。软件特色: 1、迷你界面、界面更酷、绚丽流行;保持了Windows Vista和XP下完美表现,让人耳目一新;2、卡拉OK酷狗独创“卡拉OK”歌词显示,多个模式,边听边唱,让你听歌愈加好
8、玩;3、支持当地音乐播放完美音质,支持全部音频文件,当地文件拖放,同时支持网络高速下载和当地播放;4、超强搜索和下载优化歌曲搜索引擎,提升搜索正确度;智能化节省带宽,可关闭网络功效;5、流行音乐资讯酷狗榜单家族、狗友推荐、酷吧、狗窝,最新流行音乐一网打尽,好听音乐来“找”你;6、个性化手机炫铃DIY,让拥有张扬个性铃声7、音频格式我选择我歌曲我制作,音质音效我决定8、收音机动感音乐识别体验精选多家电台,收听全球风云改变,更能识别电台中音乐。2系统相关技术及开发平台介绍本系统是采取面向对象软件开发方法,基于微软Visual Studio .Net 开发平台,以C#作为本系统开发语言实现音乐播放器
9、预定需求功效。2.1开发应用技术介绍2.1.1TechSmith Screen Capture Codec介绍TechSmith Screen Capture Codec是TechSmith企业开发Camtasia Studio一个组件,用于压缩Camtasia Recorder中视频文件,最大优点是能够确保图像质量,截取屏幕经过数次压缩,还能确保高质量。 比传统压缩方法相比,优势十分显著。 Camtasia Studio是TechSmith旗下一款专门录制屏幕动作工具,不管在何种颜色模式下它全部能轻松地对屏幕动作进行统计,包含声音、图像、鼠标移动轨迹等。另外,它还能够对音频片段进行编辑、压缩
10、、剪接从而实现多个音效播放。它还能输出包含Flash(SWF/FLV)、AVI、WMV、M4V、CAMV、MOV、RM、GIF动画等多个常见格式,是制作视频演示绝佳工具。其实Camtasia Studio已不仅仅是一个录屏工具了,它包含了5个组件:Camtasia录像器、菜单制作器、音频编辑器、剧场及播放器。本播放器在运行之前需要安装TechSmith Screen Capture Codec组件,此组件会和系统一起打包发行,用户也能够自己从网上下载更高版本组件,只有安装此组件才能实现播放器中歌词剪切功效。2.1.2FFmpeg介绍FFmpeg在Linux平台下开发,但它一样也能够在其它操作系
11、统环境中编译运行,包含Windows、Mac OS X等。这个项目最早由Fabrice Bellard提议,现在由Michael Niedermayer维护。很多FFmpeg开发人员全部来自MPlayer项目,而且目前FFmpeg也是放在MPlayer项目组服务器上。项目标名称来自MPEG视频编码标准,前面FF代表Fast Forward。使用本播放器假如要对flv格式文件进行播放则要安装FFmpeg。2.1.3Visual Studio .Net集成开发环境介绍.NET平台为创建新一代分布式Web应用提供了全部工具和技术(表示技术、构件技术和数据库技术)。.NET平台支持标准Internet
12、协议,包含HTTP(超文本传输协议)、XML(可扩展标识语言)和SOAP(简单对象访问协议)等,从而实现了异构系统间应用程序集成和通信,即用户和供给商可将在此平台上开发产品和服务无缝地嵌入本身业务进程和日常活动信息架构中。.NET平台建立在开放系统结构基础之上,集Microsoft在软件领域关键技术成就于一身。.NET平台包含一下4种关键技术:.NET Framework、.NET企业服务器、构件模块服务和Visual Studio .NET。.NET Framework是.NET平台关键中关键,它为.NET平台下应用程序运行提供基础框架,假如把Windows操作系统比作一幢摩天大厦地基,那么
13、.NET Framework就是摩天大厦中由钢筋和混凝土搭成框架。.NET企业服务器是Microsoft为企机关提供技术服务中一部分,它包含Microsoft BizTalk Server、Microsoft Commerce Server、Host Integration Server、Exchange Server、SQL Server等技术开发工具包。构建模块服务关键是Microsoft提供COM+组件服务和XML Web服务技术,利用构建模块服务开发应用程序模块,能够快速地组装一个功效完备软件。Visual Studio .NET是.NET平台关键开发工具,因为.NET平台是建立在开放
14、系统结构基础之上,所以应用程序开发人员也能够使用其它开发工具。 2.1.4C#语言介绍C#(#原为音乐标识,读Sharp)是一个面向对象编程语言,关键用于开发能够运行在.NET平台上应用程序。C#语言是微软企业开发基于.NET Framework一个编程语言,它继承了C/C+优良传统,又借鉴了Java很多特点。微软对C#定义是:“C#是从C和C+派生出来一个简单、现代、面向对象和类型安全编程语言。C#关键是从C/C+编程语言家族移植过来,C和C+程序员能够很快熟悉它。C#试图结合Visual Basic快速开发能力和C+强大灵活能力。”2C#是6月微软企业公布一个全新编程语言,是由Anders
15、 Hejlsberg和她微软开发团体所设计,具体以下特点:l 通用,支持跨平台。C#程序用户端能够运行在不一样类型用户端上,如PDA、手机等PC装置。l 简单,关键表现在垃圾搜集、指代等特征上。垃圾搜集机制将减轻开发人员对内存管理负担,而指代功效更是能够让开发者不经过内部类就调用函数。利用C#这些功效,能够使开发者经过较少代码来实现更强大应用程序,而且能够愈加好地避免错误发生,从而缩短了应用系统开发周期。l 面向对象设计,C#含有封装、继承和多态等面向对象程序语言特征。l 和Web应用紧密结合,C#支持绝大多数Web标准,如HTML、XML、SOAP等。这是C#最大特点,使用它能够轻松开发多种
16、企业级应用平台。l 安全性机制,消除软件开发中常见错误(如语法错误),.NET提供垃圾回收器能够帮助开发者有效管理内存资源。l 兼容性,C#遵照.NET公共语言规范(CLS),能够确保和其它语言开发组件兼容。l 灵活版本处理技术,C#在语言本身内置了版本控制功效,开发人员能够愈加轻易地开发和维护。l C#提供了完善错误和异常触发机制。2.2开发及运行坏境l 硬件平台:CPU飞跃双核 (主频2.0GHz)内存1G32位PC机160G硬盘l 软件平台:操作系统:Windows XP Win7Win8开发工具:Visual Studio 。本软件占用系统空间小,能满足用户对常见音频格式文件播放要求,
17、还含有歌曲、歌词下载等功效,界面美观交互性好,易于用户了解操作,且不依靠于其它软件,消耗资源少易维护,程序有很好健壮性和正确性。运行该软件所需坏境配置不高,能满足绝大多数用户需求。3系统分析3.1可行性分析可行性研究(feasibility study)目标,是搞清楚待开发项目是不是可能实现和值得进行,通常由系统分析员完成,并需写出可行性论证汇报。如结论认为可行,即可制订项目实施计划,同时开始软件开发;如结论认为不可行,则应提出终止该项目标提议。可行性论证其实是在高层次上进行一次大大简化了需求分析和设计。但它目标不是去处理用户提出问题,仅是确定这项开发是否值得进行,分析它存在哪些风险。换句话来
18、说,在投入大量精力前研究成功可能性,减小可能出现风险。即使研究结论是不值得进行,所花精力也并不浪费,因为它避免了一次更大浪费。下面我们将依据本系统特点具体描述以下可行性分析。33.1.1 经济可行性开发一个基于计算机系统关键是为了获取很好经济效益和社会效益。所以对待开发系统经济可行性论证就成为可行性研究关键内容。成本-效益分析可用于评定系统经济合理性,给出系统开发成本估算,并将估算成本和取得利润进行比对,从经济角度论证待开发系统是否可行。通常来说,基于计算机系统成本关键由4部分组成:1) 购置并安装软硬件及相关设备费用。2) 系统开发费用。3) 系统安装、运行和维护费用。4) 人员培训费用。5
19、) 结合毕业设计整个开发过程可知开发音乐播放器所需全部软件平台全部是无偿,所以在经济上是完全可行。3.1.2 技术可行性技术可行性是可行性研究关键内容。因为系统分析和定义过程和系统技术可行性评定过程同时进行,此时系统功效、性能和目标不确定性会给技术可行性论证带来很多困难。所以,技术可行性研究往往是系统开发过程中难度最大工作。该音乐播放器是用C#语音开发,调试比较简单,所需计算机硬件配置要求不高,通常PC机完全能满足开发要求。软件方面:基于微软.net开发平台使用C#面向对象编程语音,它开发速度快,简单易用,技术成熟,软件也轻易从网上取得,完全能满足开发需求。3.1.3 法理可行性法律可行性关键
20、研究新系统开发和使用是否会侵犯她人权益,是否触犯了国家法律法规。此次毕业设计是由本人独立完成,开发系统不会侵犯任何人权益,所用软件全部是经过正当路径获取,所以完全符正当律法规。总而言之,本系统开发从经济上、技术上、法律上全部是完全可行。3.2常见多个音频格式及其特点MP3格式:MP3全称是Moving Picture Experts Group Audio Layer 。MP3是Fraunhofer-IIS研究所杰出结果。在MP3出现前,以有损方法进行音频编码最好效果能够压缩到4:1。而强大MP3能够实现12:1高压缩比,正是因为这种性能巨大提升,而且在实现高压缩比同时还能够保持很好音质,所以
21、使得MP3快速地流行起来。MP3是世界上第一个实用化有损压缩编码方案,几乎全部播放软件全部支持它,也曾今产生了很多第三方编码工具。MP3编码质量分为:固定码率(CBR),平均码率(ABR)和动态码率(VBR)。4特点:音质好,压缩比比较高,被大量软件和硬件支持,应用广泛。WMA格式:WMA就是Windows Media Audio编码后文件,它是微软企业推出和MP3格式齐名一个新音乐格式。WMA在压缩比和音质方面全部超出了MP3,更是远胜于RA(Real Audio),即使在较低采样频率下也能产生很好音质。WMA针正确不是单机市场,而是网络!竞争对手就是网络媒体市场中著名Real Networ
22、ks。WMA格式有很高压缩率,通常为1:18,所以它文件所占空间比对应MP3文件少二分之一。这是经过提升音质、降低数据流量方法来实现更高压缩率。另外它还有很强防盗版功效。特点:低码率下音质表现难有对手。4WAV格式:WAV是微软Windows系统本身自带音频格式,因为Windows系统普及性,此格式已经成了目前最主流音频格式之一。WAV文件里面存放每一块数据全部有自己独立标识,经过这些标识能够告诉用户到底是什么数据。WAV格式设计很灵活,该格式本身和任何媒体数据全部不冲突,只要有软件支持,我们甚至能够在WAV格式里面存放图像。在Windows平台上,经过ACM结构及对应驱动程序,比如CODEC
23、编码/解码器,能够在WAV文件中存放超出20种压缩格式,比如ADPCM、GSM、CCITT G.711、G.723和MP3等。4特点:音质很好,被大量软件所支持。RA格式:RA格式是Real Networks企业所开发一个新型流式音频Real Audio文件格式。这是网上接触得很多一个格式,大部分音乐网站在线试听全部采取了Real Audio,这种格式完全针正确就是网络上媒体市场,支持很丰富功效。最大优点就是这种格式能够依据听众带宽来控制自己码率,在确保流畅前提下尽可能提升音质。4特点:码率可控,支持多个音频编码,可边读边放。3.3需求分析软件需求是指用户对目标软件系统在功效、性能、行为、设计
24、约束等方面期望。需求分析就是经过对应用问题及其坏境分析和了解采取一系列分析方法和技术将用户需求逐步正确化、完全化、一致化,最终形成需求规模说明文档过程。本节将从不一样角度描述系统需求。3.3.1播放器基础控制需求在着手开发系统之前首先要明确该系统应该实现部分最基础功效,然后逐步细化,为每个功效创建一个模块,再对各个模块进行开发。经过分析我们得出一款音乐播放器基础控制图3-1所表示:图 3-1 播放器基础控制图3.3.2功效需求功效需求要求开发人员必需在产品中实现软件功效,用户利用这些功效来完成任务,满足业务需求。功效需求有时也被称作行为需求 (behavioral requirement),因
25、为习惯上总是用“应该”对其进行描述。功效需求描述是开发人员需要实现什么。功效需求定义一个软件系统或组件功效,也是一个系统需提供功效及服务。功效能够用一组输入、行为及输出组合来表示。功效需求能够是计算、技术细节、数据处理或其它说明系统期望达成功效内容。功效需求会以非功效性需求(或是质量需求)为其基础。结合音乐播放器所要实现内容,我们列出用户操作模块,其中每个模块对应一个功效。用户开启程序进入主界面,用户能够经过添加模块添加当地歌曲,能够一首一首添也能够添加整个歌曲文件夹。经过播放列表用户能够实现对歌曲查找、播放、暂停、音量调整、静音。经过歌词模块能够实施歌曲歌词显示、比对、歌词字体选择。另外用户
26、还能够联网下载歌词、歌曲。其功效模块时序图以下3-2所表示:图3-2 音乐播放器功效时序图4系统设计4.1系统概要设计在需求明确、准备开始编码之前,要做概要设计。概要设计关键任务是把需求分析得到DFD转换为软件结构和数据结构。设计软件结构具体任务是:将一个复杂系统按功效进行模块划分、建立模块层次结构及调用关系、确定模块间接口及人机界面等。数据结构设计包含数据特征描述、确定数据结构特征、和数据库设计。概要设计有多个方法。在早期有模块化方法、功效分解方法;在60年代后期提出了面向数据流和面向数据结构设计方法;多年来又提出面向对象设计方法等。本系统采取模块化软件设计,自顶向下逐层把软件系统划分成若干
27、模块。每个模块完成一个特定功效,最终将全部模块根据某种方法组合成一个整体,达成整个播放器所要求功效。4.2系统功效设计及描述本音乐播放器不仅要实现对部分常见音频格式文件播放,而且还要有友好用户界面。其最终设计目标是:实现对多个音频格式文件播放、实现对歌词滚动播放及目前播放曲目长度显示、显示歌曲文件信息、实现静音和音量控制;播放器软件占用系统资源少、运行平台要求不高、界面美观舒适、操作简单、易维护、高稳定性、,能满足用户常见需求。关键划分为以下七个功效模块,每个功效模块作用描述以下: 播放控制:控制歌曲播放状态,如:播放、暂停、上一曲、下一曲。播放过歌曲按播放次序排列在播放列表中,每次退出程序、
28、重启播放器后播放列表中播放统计会自动保留不会清空。 文件控制:关键用来打开当地播放文件。经过研究音频编码解码相关技术,了解音频编码解码原理和过程,本音乐播放器支持常见音频格式文件播放如:MP3、WMA、WAV等。能够单个曲目添加,也能够将整个文件夹中曲目全部添加,实现歌曲文件添加多样化;另外还能够对播放列表进行清空,对曲目标播放次序进行控制;当播放列表中曲目过多时,能够从播放列表中快速搜索到需要播放歌曲。还有对播放列表进行控制如:打开文件所在目录、移除列表、删除文件、显示歌曲文件相关信息,如:歌手、专辑等。 歌词控制:播放音乐时控制是否显示歌曲歌词,若歌词存在则同时滚动显示歌词,若歌词不存在则
29、可联网下载歌词。另外还能够对歌词字体进行设置。 进度控制:显示目前歌曲播放总时长和已播放时长,能够经过鼠标调整歌曲播放进度,实现歌曲跳跃式播放。其实现方法是经过进度条和时间同时显示。 声音控制:调整歌曲音量大小,显示是否静音。 下载控制:能够联网下载自己喜爱歌曲、歌词。若不知道歌曲名称则能够按歌手名查找歌曲下载,若知道歌曲名则可直接输入名称进行下载,能够在下载进度列表中查看下载状态。 音乐剪切:对音乐文件进行剪切。添加目前路径,对想要歌曲进行播放,在歌曲播放过程中你能够在任何地方设置一个起点,然后,再设置一个终点。“试听歌曲”就是把你选出来这一段播放一遍,看是不是你要那一段,有时候能够早开始了
30、几秒或早结束了几秒,这个时候能够直接在起点和终点地方进行调整。然后在这个窗口上面有个“保留歌曲”,就能够把你选出来这段音乐保留起来了。我们能够经过歌曲剪切功效截取自己喜爱音乐片段,来做为自己手机铃声。其具体功效模块图4-1所表示:图4-1 音乐播放器功效模块图5系统功效实现依据上一章对系统各个模块分析,本节关键讲述怎样具体实现这些模块功效。几乎全部Windows程序全部离不开窗体,Windows窗体应用程序是Windows下进行软件开发基础。在C#中,经过Visual Studio 开发平台模版,能够自动生成多个基于Windows应用程序框架,关键包含基于.NET FrameworkWindo
31、ws窗体应用程序、Windows服务应用程序。最常见是Windows窗体应用程序。在Windows窗体应用程序中,有窗体(Form)和控件(Control)两个基础概念。窗体是控件容器,控件是应用程序显示数据或接收数据输入相对独立用户界面元素。.NET类库提供了丰富窗体相关类,包含窗体、按钮、状态栏、工具栏、菜单、文本框、列表等多个不一样界面元素;另外还提供多种控件、组件、容器。经过这些界面元素不一样组合,能够设计出友好用户界面。对于软件开发中要用到图片能够自己绘制,相关控件能够调用类库,从而设计出外形美观界面。但这也做相当费时,因为毕业设计时间有限,图片全部从网上下载,并做稍微处理,所以美观
32、方面有一定欠缺,待以后有时间慢慢改善。另外界面是由窗体、控件拖放组成,大部分代码由视图设计器自动生成,无需太多改动,所以这一部分不再具体叙述,下面将关键介绍关键功效模块关键代码实现。5.1歌曲添加模块很多应用程序全部有打开文件功效,本程序使用OpenFileDialog组件,用来打开当地磁盘上一个或多个文件,并添加到文件播放列表中。5.1.1添加歌曲文件为了赶上社会时尚,我们常常会从网上下载最热门音乐,本模块功效就是实现添加当地歌曲或已下载到电脑最新歌曲到播放列表,同时更新播放列表,使我们能立即欣赏到自己喜爱音乐。其具体代码以下:private void AddSong_Click(objec
33、t sender, EventArgs e) ofd.Filter = 音乐文件(*.wmv, *.mp3,*.wav)| *.wmv; *.mp3;*.wav|All files (*.*)|*.*; ofd.InitialDirectory = Application.StartupPath; ofd.FileName = ; ofd.RestoreDirectory = false; ofd.Title = 添加音乐文件; if (ofd.ShowDialog() = DialogResult.OK) string strLongPath = ofd.FileName; WriteFil
34、eByLongPath(strLongPath); private void WriteFileByLongPath(string strLongPath) int b = strLongPath.LastIndexOf(); string strShortPathWithExtension = strLongPath.Substring(b + 1); StreamWriter sw = new StreamWriter(list.ini, true); string extension = strShortPathWithExtension.Substring(strShortPathWi
35、thExtension.Length - 3); if (extension.ToLower() = wmv | extension.ToLower() = mp3 | extension.ToLower() = wav) string strShortPathWithoutExtension = strLongPath.Substring(b + 1, strShortPathWithExtension.Length - 4); Mp3 mp3 = new Mp3(strLongPath); if (!(String.IsNullOrEmpty(mp3.Artist) | String.Is
36、NullOrEmpty(mp3.Title) /获取成功结果(歌手名 - 歌曲名) strShortPathWithoutExtension = mp3.Artist.Trim() + - + mp3.Title.Trim(); /不然原文件名 if (!this.myListBox.Items.Contains(strShortPathWithoutExtension) /不包含 songList.Add(strShortPathWithoutExtension); Image image = getImageByArtistOrSongName(mp3.Artist, strShortPa
37、thWithoutExtension); 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.12添加歌曲文件夹 当我们要欣赏歌曲专辑时,可
38、能要添加文件比较多,显然单曲添加比较麻烦,这时我们就能够使用OpenFileDialog组件Multiselect属性和Filenames属性实现整个文件夹添加,同时更新播放列表。代码以下:private void tsmiAddSongFolder_Click(object sender, EventArgs e) if (fbd.ShowDialog() = DialogResult.OK) string str = fbd.SelectedPath; DirectoryInfo r = new DirectoryInfo(str); GetAllFiles(r); public void
39、 GetAllFiles(DirectoryInfo dir) FileSystemInfo fileinto = dir.GetFileSystemInfos(); foreach (FileSystemInfo i in fileinto) if (i is DirectoryInfo) GetAllFiles(DirectoryInfo)i); else string strLongPath = i.FullName; WriteFileByLongPath(strLongPath); private void tsmiSearch_Click(object sender, EventA
40、rgs e) if (this.mySearchPanel.boolSearchShow) /已经打开,则关闭 this.mySearchPanel.close(); else this.mySearchPanel.boolSearchShow = true; this.mySearchPanel.lb = this.myListBox; this.mySearchPanel.copyValueList(); initialSearchPanel(); 图5-1 打开文件5.2歌曲列表模块播放列表关键用来显示要播放歌曲信息,如歌手、照片、曲名。在这里我们使用ListBox控件来实现相关功效。具
41、体代码以下: 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
42、= true; this.myListBox.Location = new System.Drawing.Point(2, 115); this.myListBox.Name = myListBox; this.myListBox.Size = new System.Drawing.Size(302, 354); this.myListBox.TabIndex = 0; this.myListBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.myListBox_MouseDown);private void myListBox_MouseDown(object sender, MouseEventArgs e) if (this.myListBox.thisIndex != -1) if (e.Button = System.Windows.Forms.MouseButtons.Right) this.myListBox.ContextMenuStrip