版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于java的mp3播放器jmplayer作 者 姓 名 专 业 计算机科学与技术 指导教师姓名 专业技术职务 讲 师 山东轻工业学院本科毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业论文,是本人在指导教师的指导下独立研究、撰写的成果。论文中引用他人的文献、数据、图件、资料,均已在论文中加以说明,除此之外,本论文不含任何其他个人或集体已经发表或撰写的成果作品。对本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。本声明的法律结果由本人承担。毕业论文作者签名: 年 月 日山东轻工业学院关于毕业设计(论文)使用授权的说明本毕业论文作者完全了解学校有关保留、使用毕业论文的规定
2、,即:学校有权保留、送交论文的复印件,允许论文被查阅和借阅,学校可以公布设计论文的全部或部分内容,可以采用影印、扫描等复制手段保存本论文。指导教师签名: 毕业设计(论文)作者签名: 年 月 日 年 月 日 目 录摘 要iiiabstractiv 第一章 引言11.1 课题研究背景及意义11.2 音乐播发器的发展及历史11.3 系统开发目标21.4 本文的主要内容和结构2 第二章 相关工具及技术介绍12.1 eclipse简介32.2 java thread简介42.3 javasound简介52.4 java swing简介62.5 java properties简介7 第三章 需求分析93.
3、1 工作流程分析93.2 评价具体需求分析93.3 系统功能结构图93.4 功能详细描述103.4.1 mp3播放103.4.2 播放控制103.4.3 播放信息控制103.4.4 mp3列表管理113.4.5 歌词113.4.6 其他11 第四章 总体设计124.1 系统要求124.2 系统功能描述124.3 系统运行环境134.4 系统设计思想134.4.1 总体流程设计134.4.2 mp3播放设计144.4.3 播放模式设计154.4.4 mp3文件列表管理设计154.4.5 歌词设计164.4.6 皮肤切换设计174.4.7 显示模式设计18 第五章 详细设计195.1 界面设计19
4、5.2 系统关键类设计205.3 系统类结构22 第六章 软件功能实现236.1 播放mp3实现236.2 mp3文件解析实现236.3 mp3列表控制类实现236.4 mp3歌词解析及显示控制实现24结束语25参考文献26致 谢27v山东轻工业学院2010届本科生毕业设计(论文)摘 要随着java 语言的出现,软件的跨平台性已经能被更进一步的解决和处理,随着internet的发展,软件的跨平台性又被提高到另一个新的要求。音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。它涵盖了各种音乐格式的播放工具,比如:mp3播放器,wma播放器,mp4播放器等。它们不仅界面美观,而且操作简单,带你进
5、入一个完美的音乐空间。本系统是一个简单的mp3音乐播放器实现,旨在借助于java语言的强大的跨平台特性来实现本播放器的跨平台的通用。但由于设计时间有限目前仅支持mp3和wav格式音乐文件的播放。本系统的主要使用了java中的多线程编程,系统中的mp3播放、歌词解析及显示、播放时间的显示控制、播放器的主界面等都是单独采用一个独立的线程来进行管理控制的。本系统在结构上的核心设计模式采用了gof的中介者模式,以此来使各个模块的相互耦合度降到最低,以便更容易的进行各个模块的独立的开发从而使整个系统的灵活性和可扩展性都得到提高。开发时采用tdd。关键词 java musicplayer multi-th
6、readabstractwith the development of java language, cross-platform natures of the software have been resolved and processed can be further, as the internets development, cross-platform of software has been raised to another of the new requirements.music player is a multimedia playback software which
7、can be played variety of music files. it covers player tools that can be played a variety of music formats, such as, mp3 player, wma player, mp4 player. it not only has the beautiful interface but also operate simply. it will take you into a perfect music world.this system is a simple mp3 music play
8、er .with the help of java language features thats a powerful cross-platform, player is to be achieved this common cross-platform. as the time is limited , the mp3 player only can support mp3 and wav music files.the main use of this system is multi-thread in the java program .in the system the mp3 pl
9、aying, lyrics analysed and displayed, the control of play time, and the players main interface are all used of an individual thread.the structure of the systems core design is using an mediator pattern which is called gof pattern, in order to enable each module to minimize the coupling. in order to
10、more easily carry out the independently developed of each module .so the system flexibility and scalability can be improved. the project was developed in tdd4.key wordsjava;musicplayer;multi-thread第一章 引言1.1 课题研究背景及意义当今时下, 随着信息技术的不断发展,软件技术的发展也是日新月异,人们对于音乐的享受方式也是不断的发生变化,各种音乐播放软件让人们享受变的更加的舒适,愉快和方便。基于编程
11、语言的不同以及internet 的发展,现在比较流行的音乐播放的形式有软件播放像千千静定,酷我音乐盒等,在线软件播放像百度的在线音乐盒,以及各大门户网站基本上都提供了在线收听音乐的服务。在线收听的形式可以不依赖于操作系统的软件环境凡是能与internet连接的计算机都可以进行在线收听。但在收听也有它的局限性,像无法与internet连接时。这时候本地的音乐播放软件就显示出它的优势来了,但由于操作系统的本身软件环境及生产厂家的限制,使用非可夸平台语言编写的音乐播放软件无法做到在操作系统上的共用,本题目的意义在于使用java这种跨平台的语言,编写一个通用的音乐播放软件。1.2 音乐播发器的发展及历
12、史时下,音乐播放器已经成为人们生活中不可或缺的必备品。它的诞生,让动听的声音有了存储的载体,得以广泛的传播和分享。接下来,笔者就针对它的发展史做个简单的回顾。1877年12月,爱迪生公开表演了留声机,“会说话的机器”诞生的消息,立刻轰动了全世界。外界舆论马上把他誉为科学界之拿破仑,留声机也成为19世纪最引人振奋的三大发明之一。1898年,丹麦的v.波尔森发明了钢丝录音机,从此,以硬磁性材料为载体,利用磁性材料的剩磁特性将声音信号记录在载体,具有重放、录音功能的磁带录音机开始在家庭普及。随着社会的发展和科技的进步,人们对音色品质的追求越来越高。老式录音机音色简单、苍白的特性,使其逐渐被社会淘汰。
13、代表着更清晰、立体声、更浑厚音质的播放器cd正式登上舞台。1982年,世界上第一台cd播放器、同时也是索尼生产的第一台cd播放器诞生了sonys cdp-101。cd的出现,依靠完美的音质表现、快捷搜歌、方便携带等功能,风靡了播放器市场10多年之久。直到mp3的出现。尽管1995年9月9日发布的第一款实时软件mp3播放器winplay3,已经让许多人能够在自己的个人电脑上编码和回放mp3文件,音乐播放器的智能时代正式来临,但是由于pc和互联网的发展所限,mp3并没有获得广泛的普及。直到2001年10月,苹果公司推出了第一代ipod,将mp3播放器演绎到艺术与文化的境界。它不仅容量巨大,操作智能
14、,而且外形时尚,一经推出,即刻获到全球范围内的热捧!苹果公司之所以强大,除了自身强大的研发能力和创新意识以外,善于利用外设厂商资源,也是其成功的重要一环。在苹果的研发基地,来自全球70多家顶尖配件厂商共同参与苹果每一款新品的研发过程。世界顶级音响制造品牌jbl、哈曼卡顿、全球最知名的三大耳机品牌ue、ety、westone都量身为ipod打造完美的声音输出设备,让ipod完美的音质得以淋漓尽致的展现。 1.3 系统开发目标本系统的开发目标为: 开发出一个不受操作系统(此操作系统必须支持javase)限制的mp3音乐播放器。此播放器要实现一般常见播放器的一些通用的功能。要求系统的各个模块之间尽可
15、能的达到高内聚,低耦合,要求系统具有较高的可维护性和可扩展性。1.4 本文的主要内容和结构本论文由五章构成,其中第四、五章为核心部分,讲述了系统的实现。具体的每个章节的主要内容如下:第一章 引言。主要介绍了课题的研究背景及意义以及系统的开发目标以及mp3播放器的发展历史。第二章 相关工具及技术介绍。主要介绍了java线程、java多线程编程,java音乐播放的主要apijavasound、播放器所使用的界面apiswing、eclipse开发工具。第三章 需求分析。主要从需求的角度介绍了mp3音乐播放器的功能等。第四章 总体设计。本章为本文的核心部分,主要介绍了mp3播放器的各个设计点的设计思
16、想。第五章 详细设计。本章也是系统的核心章节之一,主要介绍了播放器的界面设计、系统的关键类的设计以及系统的类结构。第五章 软件功能实现。本章主要从代码的角度介绍了整个播放器的设计。第二章 相关工具及技术介绍2.1 eclipse简介eclipse是一个非常优秀的集成开发环境。ibm花了多年的时间来开发基于java的公开源代码的软件eclipse,这个在ibm支持下的开发源码项目经过一段时期的发展完善,已经为广大java开发者所熟悉。eclipse是一个用于构建集成web和应用程序开发工具的平台,它本身并不会提供大量的最终用户功能,而是通过插件来快速开发集成功能的部件。eclipse是一款非常优
17、秀的开源ide,非常适合java开发,由于支持插件技术,受到了越来越多的开发者的欢迎。最新的eclipse 3.0不但界面作了很大的增强,而且增加了代码折叠等众多优秀功能,速度也有明显的提升。配合众多令人眼花缭乱的插件,完全可以满足从企业级java应用到手机终端java游戏的开发。eclipse提供了公共用户界面模型来使用工具。eclipse软件旨在简化用于多操作系统软件工具的开放过程,他被设计成可以在多个操作系统上运行,基于eclipse的软件在linux和微软windows系统上都可以运行,因此可以省去开发者有时要把windows应用程序切换到linux的操作,进而简化了整个开发过程。同时
18、eclipse还提供了于每个底层操作系统强大集成。eclipse的核心是动态发现插件的体系结构。平台负责处理基本环境的后台工作,并提供标准的用户导航模型,于是每个插件可以专注于执行少量的任务,eclipse的出现,不仅为java开发者提供了免费使用强大的java ide的机会,而且也为c+的开发者提供了cdt。通过集成大量的插件,eclipse的功能可以不断扩展,以支持各种不同的应用。eclipse软件可以用于管理多种开发任务,其中包括测试、性能调整以及程序调试等,而且还可以继承来自多个供货商的第三方应用程序开发工具。此外,eclipse软件非常适合开发电子商务应用程序,例如ibm公司自己的面
19、向web服务的webspbere应用程序开发工具就是建立在eclipse基础之上。除此之外,eclipse平台是一个成熟的、精心设计的、可扩展的体系结构。eclipse的价值在于他为创建可扩展的集成开发环境提供了一个开放源码平台。这平台允许任何人构建与环境和其他工具无缝集成的工具,而工具与eclipse无缝集成的关键便是插件。2.2 java thread简介 线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的dos)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运
20、行的任何程序都至少有一个主线程。进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,这些进程包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一个进程中的线可以共享系统分派给这个进程的内存空间。线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈, 是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。java编写程序都运行在在java虚拟机(jvm)中,在jv
21、m的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java 应用程序,就会启动一个jvm进程。在同一个jvm进程中,有且只有一个进程,就是它自己。在这个jvm环境中,所有程序代码的运行都是以线程来运行。一般常见的java应用程序都是单线程的。比如,用java命令运行一个最简单的helloworld的java应用程序时,就启动了一个 jvm进程,jvm找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后, 主线程运行完成。jvm进程也随即退出 。对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的
22、线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了进程的并发执行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支持。在java程序中,jvm负责线程的调度。线程调度是值按照特定的机制为多个线程分配cpu的使用权。调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得cpu使用权,并平均分配每个线程占用cpu的时间;抢占式调度是根据线程的优先级别来获取cpu的使用权。j
23、vm的线程调度模式采用了抢占式模式。所谓的“并发执行” 、“同时”其实都不是真正意义上的“同时” 。众所周知,cpu都有个时钟频率,表示每秒中能执行cpu指令的次数。在每个时钟周期内,cpu实际上只能去执行一条(也有可能多条)指令。操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分),然后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。因此多任务、多进程、多线程都是操作系统给人的一种宏观感受,从微观角度看,程序的运行是异步执行的。java语言的多线程需要操作系统的支持。java 虚拟机允
24、许应用程序并发地运行多个执行线程。java语言提供了多线程编程的扩展点,并给出了功能强大的线程控制api。在java中,多线程的实现有两种方式: 1. 扩展java.lang.thread类2. 实现java.lang.runnable接口 每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个 新 thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。 当 java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法
25、)。java 虚拟机会继续执行线程,直到下列任一情况出现时为止: 1. 调用了 runtime 类的 exit 方法,并且安全管理器允许退出操作发生。2. 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。2.3 javasound简介javasound是一个小巧的低层api,支持数字音频和midi数据的记录/回放。在jdk 1.3.0之前,javasound是一个标准的java扩展api,但从java 2的1.3.0版开始,javasound就被包含到jdk之中。由于java有着跨平台(操作系统、硬件平台)的特点,基于
26、javasound的音频处理程序(包括本文的程序)能够在任何实现了java 1.3+的系统上运行,无需加装任何支持软件。使用javasound api,可以实现各种基于声音的应用,例如声音录制、音乐播放、网络电话、音乐编辑等。javasound api又以各种解码和合成器spi(服务提供者接口, service provider interface)为基础,实现各种音乐格式的解码与转码。在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、cd播放器、磁带播放器等,可以在它们到达targetdataline之前,利用混频器控制输入混频,最后在程序中通过targetdataline获得数
27、字化的音频输入流。类似地,在处理输出音频时,混频器用来对一系列来自sourcedataline的数据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。sourcedataline是一个可写入音频信号数字流的设备,例如,我们可以从一个wav文件读取内容写入到sourcedataline,然后再通过扬声器输出。2.4 java swing简介swing是一个为java设计的gui工具包。 swing 是 java api 的一部分。 swing 包括了图形用户界面 (gui) 器件 如:文本框,按钮,分隔窗格和表。 swing提供许多比awt更 好的屏幕显示元素。它们用纯jav
28、a写成,所以同java本身一样可以跨平台运行,这一点不像awt。 它们是jfc的一部分。 它们支持可更换的观感和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台 上使用java支持的任意观感。 轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。sun把swing定义为一组用户自定义化的图形组件,这些组件的外观样式可以在运行时改变。实际上,swing含义远不只此。它是sun创建的用于java企业级应用开发的下一代gui工具集。这就意味着程序员可以使用swing和一组功能强大的组件来创建大型java应
29、用程序。还可以方便地扩展或者修改这些组件来控制它们的外观和行为。 基本类库是用来帮助程序员使用java创建企业级应用的一组库。jfc除了包括swing外,还包括awt,accessibility api, 2d api,并加强了对拖放功能的支持。 swing是建立在核心awt库之上。swing并不包括任何平台相关(本地)代码,你可以在任何实现jdk1.1.5以上的平台或虚拟机上发布swing。 swing引进了一个action类,这使得协调gui组件和它们的功能简单化。尽管本身没有定义大量事件,swing却极其依赖于awt1.1的事件处理机制。每一个swing组件还包括一些外在属性。这是因为s
30、wing组件和javabeans规范有联系。这就意味着可以把swing组件引进到各种gui构建工具中,这对可视化编程来说很有用处。swing的特性有:1)可插拔的外观样式。swing允许用户在运行时改变外观样式而不需要关闭应用程序。2)轻量级组件 这是指组件不依赖于本地的对等组件来渲染它们。而是它们使用简单的图形元素来绘制自身甚至允许部分透明。而awt组件是“重型组件”。轻型组件使用graphics对象的绘图元素(象drawline(),fillrect()等)来渲染自身。一般在包含它们的顶层重型组件表面渲染自身。绝把部分swing组件是轻型组件,只有一些顶层容器不是。这种设计使得程序员可以在
31、运行时绘制应用程序的外观。而且,swing组件支持组件行为的简单修改。swing包含250多个类,是组件和支持类的集合。swing提供了40多个组件,是awt组件的四倍。除提供替代awt重量组件的轻量组件外,swing还提供了大量有助于开发图形用户界面的附加组件。1. awt的替代组件用于替代awt重量组件的swing轻量组件中许多组件与它们所替代的awt组件几乎是源代码兼容的。这使得替换awt组件的工作相当简单。除模仿awt组件所提供的功能外,几乎所有的swing替代组件都有其他一些特性。例如,swing按钮和标签可显示图标和文本,而awt按钮和标签只能显示文本。该类组件均使用windows
32、的界面样式。2. swing增加的组件除提供awt重量组件的替代组件外,swing还提供了许多其他组件,如表格、树、定制对话框等。2.5 java properties简介扩展名为.properties的文件经常作为配置文件出现在我们的应用中,如hibernate、log4j等就曾经或正在使用.properties作为核心配置文件。掌握此类文件的读写对我们理解配置文件的好处是显而易见的。properties 类表示了一个持久的属性集4。properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的
33、属性列表中搜索到属性键,则搜索第二个属性列表。 因为 properties 继承于 hashtable,所以可对 properties 对象应用 put 和 putall 方法。但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是 strings 的项。相反,应该使用 setproperty 方法。如果在“有危险”的 properties 对象(即包含非 string 的键或值)上调用 store 或 save 方法,则该调用将失败。 load 和 store 方法按简单的面向行的格式加载和存储属性。此格式使用 iso 8859-1 字符编码。可以使用 unicode 转义符来编写此编
34、码中无法直接表示的字符;转义序列中只允许单个 u 字符。可使用 native2ascii 工具对属性文件和其他字符编码进行相互转换。 loadfromxml(inputstream) 和 storetoxml(outputstream) 方法按简单的 xml 格式加载和存储属性。默认使用 utf-8 字符编码,但如果需要,可以指定某种特定的编码。xml 属性文档具有以下 doctype 声明: !doctype properties system 注意,导入或导出属性时不访问系统 uri ( uri 仅作为一个惟一标识 dtd 的字符串。第三章 需求分析3.1 工作流程分析用户希望通过音乐播放
35、器实现mp3音乐播放的功能,同时用户可以自主的控制播放器中的mp3的播放,包括前一首播放、下一首播放、停止播放。同时用户希望看到当前正在播放的mp3的详细信息,比如mp3的专辑、年份、歌手等信息,用户还想对当前播放器的整体状态有一个了解,如以播放时长等。用户可以对播放器的音量进行控制,可以对播放器自动播放mp3的播放顺序作出选择,可以对播放器的皮肤样式作出更改,用户肯能还想定义自己喜欢风格样式的播放器皮肤。如果有歌词文件存在的话,用户可能希望播放器能够同步显示对应的歌词。用户有时可能还会感觉将播放的界面变的非常小放在桌面的某个角落会更合适一些。3.2 评价具体需求分析1. mp3播放 主要用于
36、播放器的mp3音乐文件的播放。2. 播放控制 主要用于播放器的下一首播放、前一首播放、停止播放、播放的控制。3. 播放信息显示控制 主要包括mp3的已播放时间、播放状态、mp3文件信息的显示。4. mp3列表管理 主要包括对播放器中mp3音乐文件的增加、增加时的检查和删除。5. 歌词解析及同步显示 主要包括对歌词文件的查找、解析和同步显示。6. 播放模式控制 主要用于在播放器的各种播放模式之间进行切换,如循环播放、随机播放等。7. 显示方式控制 主要用于控制播放器的迷你模式和完全模式的切换及同步的组件的显示和隐藏。8. 皮肤切换控制 用于在系统的各种皮肤之间进行切换。9. 音量控制 控制播放器
37、的音量大小。3.3 系统功能结构图本mp3音乐播放器的主要功能分为五大模块,分别是播放控制模块、播放信息控制模块、mp3列表管理模块、歌词模块、以及其他功能模块。在各个模块中又包含更详细的功能划分详细内容如图3-1所示播放控制停止控制下一首控制前一首控制播放模式播放控制播放信息控制mp3信息播放信息歌词歌词解析歌词显示其他音量控制显示模式皮肤切换mp3列表管理删除mp3增加mp3mp3播放播放mp3jmplayer图3-1 jmplayer系统功能结构图3.4 功能详细描述3.4.1 mp3播放此部分为系统的核心部分,主要使用了javasoundapi控制操作系统的音频系统,以音频系统的音频输
38、入输出流进行mp3的播放,此部分是播放控制模块、播放信息控制模块、歌词模块等的运行基础。3.4.2 播放控制主要进行mp3音乐文件的播放控制,主要包括常见播放器的基本的播放控制功能如停止功能、下一首功能、前一首功能等,包括播放器的播放模式的控制(主要实现了常用的五种播放模式:单曲播放、单曲循环、列表循环播放、列表播放、随机播放)。模式播放的控制主要用在mp3处于播放模式控制下的音乐文件播放完成时使用。3.4.3 播放信息控制主要进行当前播放状态的控制,如播放是处于播放还是停止状态的信息。当前正在播放的mp3的歌手信息、mp3名称、播放的频率等信息的显示以及以播放时间的显示控制,mp3的数据信息
39、通过解析mp3音乐文件本身来获得。在mp3文件的后置128字节中保存着mp3的一些基本信息。3.4.4 mp3列表管理主要进行系统中mp3列表中音乐文件的维护。同时还包括mp3播放器在初始启动的时候对原来列表中mp3文件的初始化以及在播放器推出的时候对现有mp3列表中音乐文件的保存。本系统中使用.properties格式配置文件的形式来存储mp3文件列表。3.4.5 歌词本部分的主要功能为提供对具有歌词文件的mp3的歌词的播放时同步播放。主要根据当前播放的mp3音乐文件进行对应的mp3歌词文件(.lrc)的查找,查找到歌词文件进行解析后进行时间点的匹配,匹配成功后在恰当的时间点将歌词显示在歌词
40、框中。3.4.6 其他1. 显示模式初始定义播放器具有两种显示模式:完全模式和迷你模式。系统在完全模式时系统的主控制面板为最大化状态,系统的播放状态,播放时间,音量控制滚动条均处于可见可操做状态。系统在迷你模式时系统的播放状态,播放时间,音量控制滚动条均处于不可见不可操做状态。系统当中由一个模式控制按钮来控制播放器模式的切换。2. 音量控制音量控制主要完成控制播放器的音量的大小以及静音的控制。音量控制按钮准备设计为一个滑动条,根据滑动条的滚动实现播放器音量大小的增减。系统在开始时要读取上次播放器的使用时音量并初始化到播放器的界面上,系统在退出是要对播放器的音量进行保存以便下一次读取。3. 皮肤
41、切换用于mp3音乐播放器在系统的各种皮肤之间进行切换,同时支持用户自定的皮肤。只要用户在系统的皮肤目录下放入有效的皮肤主题,系统在进行皮肤切换操作时会首先到系统的皮肤目录下加载所有的合法的皮肤并将其加入到系统的皮肤面板上,当用户选择了某种皮肤样式后,播放器的皮肤会自动切换为选中的皮肤主题相应的图片。第四章 总体设计4.1 系统要求设计系统结构,根据需求分析给出的功能得出系统体系结构。如划分模块:1.软件能满足人们的音乐播放的目的,而且操作过程直观、简便。2.系统采用模块化程序设计方法,便于模块之间独立的进行开发。3.要求系统可以非常容易的添加新的功能。4.2 系统功能描述本节以本播放器的功能点
42、和功能模块单位介绍基于java的音乐播放器jmplayer的总体的功能设计。1. mp3播放播放器以java多线程编程设计了播放器的mp3播放,每播放一首新的mp3音乐时都会产生一个独立的播放线程。在每播放一首新的mp3时,系统会对播放器的状态做检查,如果有正在播放音乐的线程在运行,则首先停止此线程,并重置播放器的状态。2. 播放控制主要功能包括播放、停止播放、下一首播放,播放、前一首播放3. 播放信息控制主要功能包括显示当前的播放状态、当前播放的音乐文件、mp3的歌手、mp3的音频频率以及当前mp3播放时间信息的控制和显示。4. mp3文件列表管理本节主要包括对mp3文件的增加、增加时对音乐
43、文件的检查(此播放器暂时只支持.mp3和.wav格式的音频文件)、mp3文件的删除以及mp3播放是播放索引的控制和增加删除mp3文件时mp3显示的下标索引的控制。5. 歌词本节的主要功能包括歌词文件的查找、歌词文件的解析、歌词文件在歌词面板中的显示。歌词显示的控制在本系统中采用一个独立的线程,此线程在mp3开始播放是同步开始,并在得到歌词文件properties集合后负责在歌词面板上显示对应时间点的歌词。6. 显示模式主要包括完全显示模式功能和迷你显示模式功能。7. 音量控制主要包括通过一个滑动条的拖拽来实现音量的大小的控制以及静音的控制、由静音转为非静音时的音量还原。8. 皮肤控制主要实现播
44、放器的一系列的控制按钮的外观改变,各种控制按钮的图片格式现在只暂时实现了对.gif格式图片的支持,用户可以按照播放器的规范定义自己喜欢的播放器的外观。9. 已播放时间的控制使用一个单独的线程来控制mp3的已播放时间的统计和显示,当mp3开始播放是此线程开始运行,当mp3停止播放时,此线程结束。此线程运行期间会首先标记一个mp3的开始播放时间,然后会每0.5秒钟对已播放的时间进行一次统计计算,并将计算的结果格式化为适当的时、分、秒的格式显示在系统的播放信息控制面板上。10. 系统配置文件1. cperties 用于保存播放器状态包括播放器的当前mp3索引、播放器音量、播放器播放
45、模式、播放器的皮肤样式等,以便启动时初始化播放器。2. mp3lperties 用于保存播放器的mp3文件列表,包括mp3文件的名称和mp3文件的绝对路径。4.3 系统运行环境硬件接口:pentium 800mhz 、内存128mb、硬盘500mb以上的pc机。软件接口:任何支持java(jvm)的操作系统4.4 系统设计思想4.4.1 总体流程设计本播放器的整体流程为首先启动播放器后使用i/o输入流读取mp3lperties数据文件,并由此数据文件解析得到mp3文件列mp3filelist后读取perties配置文件,并由此初始化播放器的状态,
46、再进一步初始化播放器的外观包括播放模式、swing mp3 list,、音量、上次退出时的mp3索引等,最后播放器退出时将播放器的使用i/o输出流状态写入perties,播放器的mp3文件列表数据写入perties数据文件中。如图4-1所示开始结束读取pertiesmp3filelist解析读取perties初始化播放器状态初始化播放器外观1.初始化播放模式2.初始化音量3.初始化mp3文件列表4.初始化mp3索引播放器退出保存播放器状态保存mp3文件列表图4-1 jmplayer总体流程图4.4.2 mp3播放设计本系统
47、的mp3播放采用线程控制的方式来进行。设计思想为首先根据mp3的路径查找对应的mp3文件,如果文件不存在则不做播放处理,如果文件存在则首先检查当前播放器是否在播放mp3文件,如果正在播放则停止正在播放的mp3线程并重新初始化mp3播放线程和相关的资源,初始化完成后开始播放。具体流程如图4-2所示。开始结束查找mp3文件mp3文件存在不存在播放器正在播放存在停止播放线程初始化播放线程是否图4-2 mp3播放流程图4.4.3 播放模式设计本系统中共设计了五中播放模式:单曲播放、单曲循环、列表循环播放、列表播放、随机播放。设计思路为系统中维护一个当前正播放的mp3的索引currentmp3index
48、,在当前播放的mp3播放完后,各种播放模式基于此播放索引决定下一首要播放的mp3的index值,同时播放模式的类中维护一个对播放器的引用。4.4.4 mp3文件列表管理设计本系统的mp3列表管理采用配置文件( perties )的形式进行存储管理,采用缓存机制进行播放器在运行时mp3文件的增加和删除管理。本系统最初对于mp3文件的管理采用的是每次进行增加或者删除mp3文件的操作时,对进行与配置文件的同步更行,性能非常低效,也造成了许多不必要的浪费,后来引入缓存机制对mp3文件管理极大的提高了系统的性能。详细流程如图 4-3 所示图4-3 mp3文件列表管理流程图4.4.5 歌词
49、设计本部分当中也采用一个独立的线程来进行歌词时间和显示的控制,首先在mp3开始播放后会根据mp3文件名到系统的lyrics目录下查找对应于此mp3名称的.lrc格式的歌词文件,如果找到则进一步解析此lrc歌词文件,解析完成后此线程会根据自己的独立的时间统计来匹配解析出来的时间戳,如果匹配成功则把对应时间点的歌词显示在歌词面板当中。具体流程如图4-4所示图4-4 jmplayer歌词控制流程图4.4.6 皮肤切换设计因为设计的时间有限本系统的皮肤切换功能只是针对了系统的控制按钮的外观进行, 如果时间能再宽裕一些可以进行针对播放器整个外观的皮肤切换的设计和更加灵活的控制。另外由于时间的原因本系统的
50、所支持的皮肤图片文件格式目前只限于对.gif格式文件,此处可以作为以后再研究和补充的一个设计点。皮肤切换的设计思路为,首先到系统的皮肤目录(skin目录)下查找符合条件的皮肤主题, 并将其显示在播放器的皮肤面板中,当选中某一种主题的皮肤后,播放器的相应部分的外观图片会被替换成选中的主题皮肤的对应图片。具体流程如图4-5所示图4-5 jmplayer皮肤切换设计流程图4.4.7 显示模式设计当系统处于完全模式时,点击显示模式对应的按钮时,隐藏系统的播放信息显示控制面板,同时设置计算播放器的位置和大小。当系统处于迷你模式时,点击显示模式对应的按钮时,显示系统的播放信息显示控制面板,同时设置计算播放
51、器的位置和大小为完全模式时的大小。第五章 详细设计5.1 界面设计本系统的全部的界面内容包括:主控制面板,mp3列表面板,皮肤设置面板,歌词显示面板,播放模式选择面板,系统使用了java swing制作了播放器的界面。由于时间有限,加上手工对swing组件的调整的低效,本播放器的界面并不是十分的美观,只是做了一下简单的美化处理,如果时间充足可以对播放器的外观做进一步的美化。图5-1为播放器的完全显示模式时的界面,图5-2为播放器迷你模式时的界面图5-1 jmplayer完全显示模式界面图5-2 jmplayer迷你显示模式界面5.2 系统关键类设计1. mp3player类 系统的核心类,本系
52、统的整体的类之间的通信采用了设计模式中的中介者模式,此类即为此模式当中的中介,系统的其他部分都与此类进行交互,再由此类做进一步的转发控制,由此降低了系统中各类之间进行相互通信的耦合性,系统中的其他类只需要持有一个对此核心类的引用,而不必关心系统中其他类。此类主要实现的功能为播放控制模块的主要功能,包括播放、停止播放、下一首播放、前一首播放、静音、静音恢复等。 2. playerengine类 主要以多线程的方式实现了mp3音乐播放以及对mp3音频文件信息的解析,主要的播放操作功能是采用了javasoundapi进行的,javasound api以各种解码和合成器spi(服务提供者接口,serv
53、ice provider interface)为基础,实现各种音乐格式的解码与转码。在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、cd播放器、磁带播放器等,可以在它们到达targetdataline之前,利用混频器控制输入混频,最后在程序中通过targetdataline获得数字化的音频输入流。类似地,在处理输出音频时,混频器用来对一系列来自sourcedataline的数据进行混频处理,经处理后的信号可输出到各种输出端口。如图5-3所示图5-3 javasound 音频处理流程图3. playerframe类 主要用于mp3播放器的外观显示,各种控制按钮、音量控制滚动条、播放
54、模式面板、皮肤切换面板、歌词面板、mp3列表面板都在此进行定义和管理。本类以播放器的功能设计点为单位,逐步进行各个模块的初始化或加载。4. mp3filecontroller类主要用于对mp3列表内的mp3文件的管理,包括播放器启动是的初始化和播放器退出时的对mp3列表中数据的同步存储。此类会使用java的io流和properties的load()方法store()方法相配合进行对数据的读写。5. lyricsparser类主要用于根据mp3进行相应的lrc格式的歌词文件的查找、解析。此类首先到系统的歌词目录(lyrics)下查找对应的歌词文件,查找成功后会使用java的io流读取歌词文件,并
55、将歌词文件中的时间戳和歌词以key-value键值对的形式存放到properties中,返回给播放器。6. lyricsshowthread 类歌词显示控制线程类,由mp3player类控制的在mp3播放时用于歌词显示控制的独立线程类。7. playtimecontrolthread 类 由于mp3已播放时间显示控制的独立线程类。此线程会标记mp3的开始时间,用于以后的时间统计。8. mp3info 类mp3信息实体类,定义与mp3相关的信息,包括mp3名、mp3文件路径、哥曲名、艺术家名、 专辑名、年份、播放频率等。9. playmode 类定义了系统的播放模式,是播放模式的抽象父类。包括它的5个子类用来表示系统的播放模式。其类结构如图 5-4所示图 5-4 jmplayer播放模式类图10. playerconstants类播放器的常量类,定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人工作反思解析总结
- 本科毕业生自我鉴定集锦15篇
- 《小故事大道理》读后感集锦15篇
- 公司后勤管理工作总结
- 学校美术教师教学计划五篇
- 五年级单元作文七篇
- 大学生实习心得体会范文-14篇
- 形势与政策(黑龙江农业工程职业学院)知到智慧树答案
- 主题班会课件:小学班会调整心态把握成功
- 《将对象映射为代码》课件
- 计量经济学练习题
- 第七单元测试卷-2024-2025学年语文四年级上册(统编版)
- 2024年商用密码应用安全性评估从业人员考核试题库-中(多选题)
- 探索心理学的奥秘智慧树知到期末考试答案章节答案2024年北京大学
- “德能勤绩廉”考核测评表
- 中职语文高一上学期《语文》期末试卷及答案
- 化学反应工程(第三版)第七章-流化床反应器
- PPT模板中华餐饮美食烤鱼宣传PPT课件
- 含氮有机化合物-胺、酰胺、尿素、丙二酰脲、胍、磺胺、吡咯、吡啶和嘧啶的结构及化学性质熟悉
- 电动车项目合作计划书范文模板
- 双柱基础暗梁的计算书
评论
0/150
提交评论