最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

毕业设计(论文)-基于java的mp3播放器jmplayer[管理资料]

IT圈 admin 35浏览 0评论

2024年4月14日发(作者:陆香之)

基于JAVA的Mp3播放器JMPlayer

作 者 姓 名

专 业

指导教师姓名

专业技术职务

计算机科学与技术

讲 师

山东轻工业学院本科毕业设计(论文)原创性声明

本人郑重声明:所呈交的毕业论文,是本人在指导教师的指导下独立研究、

撰写的成果。论文中引用他人的文献、数据、图件、资料,均已在论文中加以说

明,除此之外,本论文不含任何其他个人或集体已经发表或撰写的成果作品。对

本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。

本声明的法律结果由本人承担。

毕业论文作者签名:

年 月 日

山东轻工业学院关于毕业设计(论文)使用授权的说明

本毕业论文作者完全了解学校有关保留、使用毕业论文的规定,即:学校有

权保留、送交论文的复印件,允许论文被查阅和借阅,学校可以公布设计论文的

全部或部分内容,可以采用影印、扫描等复制手段保存本论文。

指导教师签名: 毕业设计(论文)作者签名:

年 月 日 年 月 日

目 录

摘 要

.....................................................................................................

III

ABSTRACT .................................................................................... IV

第一章 引言

....................................................................................

1

课题研究背景及意义 .............................................................................. 1

音乐播发器的发展及历史 ...................................................................... 1

系统开发目标........................................................................................... 2

本文的主要内容和结构 .......................................................................... 2

第二章 相关工具及技术介绍

.....................................................

1

Eclipse简介 .............................................................................................. 3

Java Thread简介 ...................................................................................... 4

JavaSound简介 ........................................................................................ 5

Java Swing简介 ....................................................................................... 6

Java Properties简介 ................................................................................. 7

第三章 需求分析

...........................................................................

9

工作流程分析........................................................................................... 9

评价具体需求分析 .................................................................................. 9

系统功能结构图 ...................................................................................... 9

功能详细描述......................................................................................... 10

Mp3播放 ................................................................................................ 10

播放控制 ................................................................................................. 10

播放信息控制......................................................................................... 10

Mp3列表管理 ........................................................................................ 11

歌词 ......................................................................................................... 11

其他 ......................................................................................................... 11

第四章 总体设计

.........................................................................

12

系统要求 ................................................................................................. 12

系统功能描述......................................................................................... 12

系统运行环境......................................................................................... 13

系统设计思想......................................................................................... 13

总体流程设计......................................................................................... 13

Mp3播放设计 ........................................................................................ 14

播放模式设计......................................................................................... 15

Mp3文件列表管理设计 ........................................................................ 15

歌词设计 ................................................................................................. 16

皮肤切换设计......................................................................................... 17

显示模式设计......................................................................................... 18

第五章 详细设计

.........................................................................

19

界面设计 ................................................................................................. 19

系统关键类设计 .................................................................................... 20

系统类结构............................................................................................. 22

第六章 软件功能实现

................................................................

23

播放Mp3实现 ....................................................................................... 23

Mp3文件解析实现 ................................................................................ 23

Mp3列表控制类实现 ............................................................................ 23

Mp3歌词解析及显示控制实现 ............................................................ 23

结束语

...................................................................................................... 25

参考文献

................................................................................................

24

致 谢

.....................................................................................................

27

摘 要

随着java 语言的出现,软件的跨平台性已经能被更进一步的解决和处理,随

着Internet的发展,软件的跨平台性又被提高到另一个新的要求。

音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。它涵盖了各种

音乐格式的播放工具,比如:MP3播放器,WMA播放器,MP4播放器等。它

们不仅界面美观,而且操作简单,带你进入一个完美的音乐空间。

本系统是一个简单的Mp3音乐播放器实现,旨在借助于java语言的强大的

跨平台特性来实现本播放器的跨平台的通用。但由于设计时间有限目前仅支持

mp3和wav格式音乐文件的播放。

本系统的主要使用了Java中的多线程编程,系统中的mp3播放、歌词解析

及显示、播放时间的显示控制、播放器的主界面等都是单独采用一个独立的线程

来进行管理控制的。

本系统在结构上的核心设计模式采用了GOF的中介者模式,以此来使各个

模块的相互耦合度降到最低,以便更容易的进行各个模块的独立的开发从而使整

个系统的灵活性和可扩展性都得到提高。开发时采用TDD。

关键词

Java MusicPlayer multi-thread

ABSTRACT

With the development of java language, cross-platform natures of the software

have been resolved and processed can be further, as the Internet's development,

cross-platform of software has been raised to another of the new requirements.

Music player is a multimedia playback software which 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 player .With the help of java language

features that’s 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 playing, lyrics analysed and displayed, the control of play time, and the player's

main interface are all used of an individual thread.

The structure of the system's 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 more easily carry out the independently developed of each module .So the system

flexibility and scalability can be improved. The project was developed in TDD.

Key Words

Java;MusicPlayer;multi-thread

[4]

第一章 引言

课题研究背景及意义

当今时下, 随着信息技术的不断发展,软件技术的发展也是日新月异,人们

对于音乐的享受方式也是不断的发生变化,各种音乐播放软件让人们享受变的更

加的舒适,愉快和方便。基于编程语言的不同以及Internet 的发展,现在比较流

行的音乐播放的形式有软件播放像千千静定,酷我音乐盒等,在线软件播放像百

度的在线音乐盒,以及各大门户网站基本上都提供了在线收听音乐的服务。在线

收听的形式可以不依赖于操作系统的软件环境凡是能与Internet连接的计算机都

可以进行在线收听。但在收听也有它的局限性,像无法与Internet连接时。这时

候本地的音乐播放软件就显示出它的优势来了,但由于操作系统的本身软件环境

及生产厂家的限制,使用非可夸平台语言编写的音乐播放软件无法做到在操作系

统上的共用,本题目的意义在于使用java这种跨平台的语言,编写一个通用的

音乐播放软件。

音乐播发器的发展及历史

时下,音乐播放器已经成为人们生活中不可或缺的必备品。它的诞生,让动

听的声音有了存储的载体,得以广泛的传播和分享。接下来,笔者就针对它的发

展史做个简单的回顾。

1877年12月,爱迪生公开表演了留声机,“会说话的机器”诞生的消息,

立刻轰动了全世界。外界舆论马上把他誉为"科学界之拿破仑",留声机也成为

19世纪最引人振奋的三大发明之一。

1898年,,从此,以硬磁性材料为载体,利用磁性材料的剩磁特性将声音信

号记录在载体,具有重放、录音功能的磁带录音机开始在家庭普及。

随着社会的发展和科技的进步,人们对音色品质的追求越来越高。老式录音

机音色简单、苍白的特性,使其逐渐被社会淘汰。代表着更清晰、立体声、更浑

厚音质的播放器CD正式登上舞台。1982年,世界上第一台CD播放器、同时也

是索尼生产的第一台CD播放器诞生了—Sony’s CDP-101。

CD的出现,依靠完美的音质表现、快捷搜歌、方便携带等功能,风靡了播

放器市场10多年之久。直到

MP3

的出现。

尽管1995年9月9日发布的第一款实时软件MP3播放器Winplay3,已经让

许多人能够在自己的个人电脑上编码和回放MP3文件,音乐播放器的智能时代

正式来临,但是由于PC和互联网的发展所限,MP3并没有获得广泛的普及。

直到2001年10月,苹果公司推出了第一代IPOD,将MP3播放器演绎到艺

术与文化的境界。它不仅容量巨大,操作智能,而且外形时尚,一经推出,即刻

获到全球范围内的热捧!

苹果公司之所以强大,除了自身强大的研发能力和创新意识以外,善于利用

外设厂商资源,也是其成功的重要一环。在苹果的研发基地,来自全球70多家

顶尖配件厂商共同参与苹果每一款新品的研发过程。世界顶级音响制造品牌

JBL、哈曼卡顿、全球最知名的三大耳机品牌UE、ETY、WESTONE都量身为

IPOD打造完美的声音输出设备,让IPOD完美的音质得以淋漓尽致的展现。

系统开发目标

本系统的开发目标为: 开发出一个不受操作系统(此操作系统必须支持

JAVASE)限制的mp3音乐播放器。此播放器要实现一般常见播放器的一些通用的

功能。要求系统的各个模块之间尽可能的达到高内聚,低耦合,要求系统具有较

高的可维护性和可扩展性。

本文的主要内容和结构

本论文由五章构成,其中第四、五章为核心部分,讲述了系统的实现。具体

的每个章节的主要内容如下:

第一章 引言。主要介绍了课题的研究背景及意义以及系统的开发目标以及

mp3播放器的发展历史。

第二章 相关工具及技术介绍。主要介绍了Java线程、Java多线程编程,java

音乐播放的主要API—JavaSound、播放器所使用的界面API—Swing、Eclipse开发

工具。

第三章 需求分析。主要从需求的角度介绍了mp3音乐播放器的功能等。

第四章 总体设计。本章为本文的核心部分,主要介绍了mp3播放器的各个

设计点的设计思想。

第五章 详细设计。本章也是系统的核心章节之一,主要介绍了播放器的界

面设计、系统的关键类的设计以及系统的类结构。

第五章 软件功能实现。本章主要从代码的角度介绍了整个播放器的设计。

第二章 相关工具及技术介绍

Eclipse简介

Eclipse是一个非常优秀的集成开发环境。IBM花了多年的时间来开发基于

Java的公开源代码的软件Eclipse,这个在IBM支持下的开发源码项目经过一段

时期的发展完善,已经为广大Java开发者所熟悉。Eclipse是一个用于构建集成

Web和应用程序开发工具的平台,它本身并不会提供大量的最终用户功能,而是

通过插件来快速开发集成功能的部件。

Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技

术,受到了越来越多的开发者的欢迎。最新的Eclipse ,而且增加了代码折叠等

众多优秀功能,速度也有明显的提升。配合众多令人眼花缭乱的插件,完全可以

满足从企业级Java应用到手机终端Java游戏的开发。

Eclipse提供了公共用户界面模型来使用工具。Eclipse软件旨在简化用于多

操作系统软件工具的开放过程,他被设计成可以在多个操作系统上运行,基于

Eclipse的软件在Linux和微软Windows系统上都可以运行,因此可以省去开发

者有时要把Windows应用程序切换到Linux的操作,进而简化了整个开发过程。

同时Eclipse还提供了于每个底层操作系统强大集成。

Eclipse的核心是动态发现插件的体系结构。平台负责处理基本环境的后台

工作,并提供标准的用户导航模型,于是每个插件可以专注于执行少量的任务,

Eclipse的出现,不仅为Java开发者提供了免费使用强大的Java IDE的机会,而

且也为C++的开发者提供了CDT。

通过集成大量的插件,Eclipse的功能可以不断扩展,以支持各种不同的应

用。Eclipse软件可以用于管理多种开发任务,其中包括测试、性能调整以及程

序调试等,而且还可以继承来自多个供货商的第三方应用程序开发工具。此外,

Eclipse软件非常适合开发电子商务应用程序,例如IBM公司自己的面向Web服

务的WebSpbere应用程序开发工具就是建立在Eclipse基础之上。

除此之外,Eclipse平台是一个成熟的、精心设计的、可扩展的体系结构。

Eclipse的价值在于他为创建可扩展的集成开发环境提供了一个开放源码平台。

这平台允许任何人构建与环境和其他工具无缝集成的工具,而工具与Eclipse无

缝集成的关键便是插件。

Java Thread简介

线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,

如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进

程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的

入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。

进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以

有多个进程,这些进程包括系统进程(由操作系统内部建立的进程)和用户进程

(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之

间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一

个进程中的线可以共享系统分派给这个进程的内存空间。

线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段

内存空间也叫做线程栈, 是在建立线程时由系统分配的,主要用来保存线程内部

所使用的数据,如线程执行函数中所定义的变量。

Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的

多任务是通过线程来实现的。每用java命令启动一个java 应用程序,就会启动

一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这

个JVM环境中,所有程序代码的运行都是以线程来运行。

一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简

单的HelloWorld的Java应用程序时,就启动了一个 JVM进程,JVM找到程序程

序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称

之为主线程。当main方法结束后, 主线程运行完成。JVM进程也随即退出 。

对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线

程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内

存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存

块,因此进程之间的通信相对困难。

实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了

进程的并发执行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、

多进程、多线程的支持。

在Java程序中,JVM负责线程的调度。线程调度是值按照特定的机制为多

个线程分配CPU的使用权。

调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得

CPU使用权,并平均分配每个线程占用CPU的时间;抢占式调度是根据线程的

优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。所谓

的“并发执行” 、“同时”其实都不是真正意义上的“同时” 。众所周知,CPU

都有个时钟频率,表示每秒中能执行cpu指令的次数。在每个时钟周期内,CPU

实际上只能去执行一条(也有可能多条)指令。操作系统将进程线程进行管理,

轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分),然

后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之

间相互的切换去执行,这个切换时间也是非常短的。因此多任务、多进程、多线

程都是操作系统给人的一种宏观感受,从微观角度看,程序的运行是异步执行的。

Java语言的多线程需要操作系统的支持。Java 虚拟机允许应用程序并发地

运行多个执行线程。Java语言提供了多线程编程的扩展点,并给出了功能强大的

线程控制API。

在Java中,多线程的实现有两种方式:

1.

2.

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个

线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个

新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当

且仅当创建线程是守护线程时,新线程才是守护程序。

当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指

定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为

止:

1. 调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。

2. 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用

中返回,还是通过抛出一个传播到 run 方法之外的异常。

JavaSound简介

JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。

在JDK ,JavaSound是一个标准的Java扩展API,但从Java ,JavaSound就被包

含到JDK之中。由于Java有着跨平台(操作系统、硬件平台)的特点,基于

JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java +的系统

上运行,无需加装任何支持软件。

使用JavaSound API,可以实现各种基于声音的应用,例如声音录制、音乐

播放、网络电话、音乐编辑等。JavaSound API又以各种解码和合成器SPI(服

务提供者接口, Service Provider Interface)为基础,实现各种音乐格式的解码与

转码。

在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、CD

播放器、磁带播放器等,可以在它们到达TargetDataLine之前,利用混频器控制

输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。

类似地,在处理输出音频时,混频器用来对一系列来自SourceDataLine的数

据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。

SourceDataLine是一个可写入音频信号数字流的设备,例如,我们可以从一个

WAV文件读取内容写入到SourceDataLine,然后再通过扬声器输出。

Java Swing简介

Swing是一个为Java设计的GUI工具包。 Swing 是 Java API 的一部分。

Swing 包括了图形用户界面 (GUI) 器件 如:文本框,按钮,分隔窗格和表。

Swing提供许多比AWT更 好的屏幕显示元素。它们用纯Java写成,所以

同Java本身一样可以跨平台运行,这一点不像AWT。 它们是JFC的一部分。 它

们支持可更换的观感和主题(各种操作系统默认的特有主题),然而不是真的使

用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平

台 上使用Java支持的任意观感。 轻量级元件的缺点则是执行速度较慢,优点

就是可以在所有平台上采用统一的行为。

SUN把Swing定义为一组用户自定义化的图形组件,这些组件的外观样式

可以在运行时改变。实际上,Swing含义远不只此。它是Sun创建的用于java

企业级应用开发的下一代GUI工具集。这就意味着程序员可以使用Swing和一

组功能强大的组件来创建大型java应用程序。还可以方便地扩展或者修改这些

组件来控制它们的外观和行为。

基本类库是用来帮助程序员使用java创建企业级应用的一组库。JFC除了

包括Swing外,还包括AWT,Accessibility API, 2D API,并加强了对拖放功能的支

持。

Swing是建立在核心AWT库之上。Swing并不包括任何平台相关(本地)代

码,。

Swing引进了一个Action类,这使得协调GUI组件和它们的功能简单化。

尽管本身没有定义大量事件,。每一个Swing组件还包括一些外在属性。这是因

为Swing组件和JavaBeans规范有联系。这就意味着可以把Swing组件引进到各

种GUI构建工具中,这对可视化编程来说很有用处。

Swing的特性有:1)可插拔的外观样式。Swing允许用户在运行时改变外

观样式而不需要关闭应用程序。2)轻量级组件 这是指组件不依赖于本地的对等

组件来渲染它们。而是它们使用简单的图形元素来绘制自身甚至允许部分透明。

而AWT组件是“重型组件”。轻型组件使用Graphics对象的绘图元素(象

drawLine(),fillRect()等)来渲染自身。一般在包含它们的顶层重型组件表面渲染

自身。绝把部分Swing组件是轻型组件,只有一些顶层容器不是。这种设计使得

程序员可以在运行时绘制应用程序的外观。而且,Swing组件支持组件行为的简

单修改。

Swing包含250多个类,是组件和支持类的集合。Swing提供了40多个组

件,是AWT组件的四倍。除提供替代AWT重量组件的轻量组件外,Swing还

提供了大量有助于开发图形用户界面的附加组件。

1. AWT的替代组件

用于替代AWT重量组件的Swing轻量组件中许多组件与它们所替代的

AWT组件几乎是源代码兼容的。这使得替换AWT组件的工作相当简单。 除

模仿AWT组件所提供的功能外,几乎所有的Swing替代组件都有其他一些特性。

例如,Swing按钮和标签可显示图标和文本,而AWT按钮和标签只能显示文本。

该类组件均使用Windows的界面样式。

2. Swing增加的组件

除提供AWT重量组件的替代组件外,Swing还提供了许多其他组件,如表

格、树、定制对话框等。

Java Properties简介

,如Hibernate、。掌握此类文件的读写对我们理解配置文件的好处是显而

易见的

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中

加载。属性列表中每个键及其对应值都是一个字符串。

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有

的属性列表中搜索到属性键,则搜索第二个属性列表。

因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和

putAll 方法。但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不

是 Strings 的项。相反,应该使用 setProperty 方法。如果在“有危险”的

Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该

调用将失败。

load 和 store 方法按简单的面向行的格式加载和存储属性。此格式使

用 ISO 8859-1 字符编码。可以使用 Unicode 转义符来编写此编码中无法直接表

示的字符;转义序列中只允许单个 'u' 字符。可使用 native2ascii 工具对属性

文件和其他字符编码进行相互转换。

[4]

loadFromXML(InputStream) 和 storeToXML(OutputStream) 方法按简单的

XML 格式加载和存储属性。默认使用 UTF-8 字符编码,但如果需要,可以指

定某种特定的编码。XML 属性文档具有以下 DOCTYPE 声明:

properties SYSTEM ""> 注意,导入或导出属性时不访问系统 URI ();该系统

URI 仅作为一个惟一标识 DTD 的字符串。

第三章 需求分析

工作流程分析

用户希望通过音乐播放器实现mp3音乐播放的功能,同时用户可以自主的

控制播放器中的mp3的播放,包括前一首播放、下一首播放、停止播放。同时

用户希望看到当前正在播放的mp3的详细信息,比如mp3的专辑、年份、歌手

等信息,用户还想对当前播放器的整体状态有一个了解,如以播放时长等。用户

可以对播放器的音量进行控制,可以对播放器自动播放mp3的播放顺序作出选

择,可以对播放器的皮肤样式作出更改,用户肯能还想定义自己喜欢风格样式的

播放器皮肤。如果有歌词文件存在的话,用户可能希望播放器能够同步显示对应

的歌词。用户有时可能还会感觉将播放的界面变的非常小放在桌面的某个角落会

更合适一些。

评价具体需求分析

1. mp3播放 主要用于播放器的mp3音乐文件的播放。

2. 播放控制 主要用于播放器的下一首播放、前一首播放、停止播放、播放的控

制。

3. 播放信息显示控制 主要包括mp3的已播放时间、播放状态、mp3文件信息

的显示。

4. mp3列表管理 主要包括对播放器中mp3音乐文件的增加、增加时的检查和

删除。

5. 歌词解析及同步显示 主要包括对歌词文件的查找、解析和同步显示。

6. 播放模式控制 主要用于在播放器的各种播放模式之间进行切换,如循环播

放、随机播放等。

7. 显示方式控制 主要用于控制播放器的迷你模式和完全模式的切换及同步的

组件的显示和隐藏。

8. 皮肤切换控制 用于在系统的各种皮肤之间进行切换。

9. 音量控制 控制播放器的音量大小。

系统功能结构图

本Mp3音乐播放器的主要功能分为五大模块,分别是播放控制模块、播放

信息控制模块、Mp3列表管理模块、歌词模块、以及其他功能模块。在各个模

块中又包含更详细的功能划分详细内容如图3-1所示

JMPlayer

Mp3列表管理

Mp3播放

播放控制

播放信息控制

歌词

其他

M

p

3

M

p

3

M

p

3

M

p

3

图3-1 JMPlayer系统功能结构图

功能详细描述

Mp3播放

此部分为系统的核心部分,主要使用了JavaSoundAPI控制操作系统的音频

系统,以音频系统的音频输入输出流进行Mp3的播放,此部分是播放控制模块、

播放信息控制模块、歌词模块等的运行基础。

播放控制

主要进行mp3音乐文件的播放控制,主要包括常见播放器的基本的播放控制

功能如停止功能、下一首功能、前一首功能等,包括播放器的播放模式的控制(主

要实现了常用的五种播放模式:单曲播放、单曲循环、列表循环播放、列表播放、

随机播放)。模式播放的控制主要用在mp3处于播放模式控制下的音乐文件播放

完成时使用。

播放信息控制

主要进行当前播放状态的控制,如播放是处于播放还是停止状态的信息。当

前正在播放的mp3的歌手信息、mp3名称、播放的频率等信息的显示以及以播

放时间的显示控制,mp3的数据信息通过解析mp3音乐文件本身来获得。在mp3

文件的后置128字节中保存着mp3的一些基本信息。

Mp3列表管理

主要进行系统中mp3列表中音乐文件的维护。同时还包括mp3播放器在初

始启动的时候对原来列表中mp3文件的初始化以及在播放器推出的时候对现有

mp3列表中音乐文件的保存。。

歌词

本部分的主要功能为提供对具有歌词文件的mp3的歌词的播放时同步播放。

主要根据当前播放的mp3音乐文件进行对应的mp3歌词文件(.lrc)的查找,查

找到歌词文件进行解析后进行时间点的匹配,匹配成功后在恰当的时间点将歌词

显示在歌词框中。

其他

1. 显示模式

初始定义播放器具有两种显示模式:完全模式和迷你模式。系统在完全模式

时系统的主控制面板为最大化状态,系统的播放状态,播放时间,音量控制滚动

条均处于可见可操做状态。系统在迷你模式时系统的播放状态,播放时间,音量

控制滚动条均处于不可见不可操做状态。系统当中由一个模式控制按钮来控制播

放器模式的切换。

2. 音量控制

音量控制主要完成控制播放器的音量的大小以及静音的控制。音量控制按钮

准备设计为一个滑动条,根据滑动条的滚动实现播放器音量大小的增减。系统在

开始时要读取上次播放器的使用时音量并初始化到播放器的界面上,系统在退出

是要对播放器的音量进行保存以便下一次读取。

3. 皮肤切换

用于mp3音乐播放器在系统的各种皮肤之间进行切换,同时支持用户自定

的皮肤。只要用户在系统的皮肤目录下放入有效的皮肤主题,系统在进行皮肤切

换操作时会首先到系统的皮肤目录下加载所有的合法的皮肤并将其加入到系统

的皮肤面板上,当用户选择了某种皮肤样式后,播放器的皮肤会自动切换为选中

的皮肤主题相应的图片。

第四章 总体设计

系统要求

设计系统结构,根据需求分析给出的功能得出系统体系结构。如划分模块:

,而且操作过程直观、简便。

,便于模块之间独立的进行开发。

系统功能描述

本节以本播放器的功能点和功能模块单位介绍基于Java的音乐播放器

JMPlayer的总体的功能设计。

1. Mp3播放

播放器以java多线程编程设计了播放器的mp3播放,每播放一首新的mp3

音乐时都会产生一个独立的播放线程。在每播放一首新的mp3时,系统会对播

放器的状态做检查,如果有正在播放音乐的线程在运行,则首先停止此线程,并

重置播放器的状态。

2. 播放控制

主要功能包括播放、停止播放、下一首播放,播放、前一首播放

3. 播放信息控制

主要功能包括显示当前的播放状态、当前播放的音乐文件、mp3的歌手、mp3

的音频频率以及当前mp3播放时间信息的控制和显示。

4. Mp3文件列表管理

本节主要包括对mp3文件的增加、增加时对音乐文件的检查()、mp3文件的

删除以及mp3播放是播放索引的控制和增加删除mp3文件时mp3显示的下标索

引的控制。

5. 歌词

本节的主要功能包括歌词文件的查找、歌词文件的解析、歌词文件在歌词面

板中的显示。歌词显示的控制在本系统中采用一个独立的线程,此线程在mp3

开始播放是同步开始,并在得到歌词文件Properties集合后负责在歌词面板上显

示对应时间点的歌词。

6. 显示模式

主要包括完全显示模式功能和迷你显示模式功能。

7. 音量控制

主要包括通过一个滑动条的拖拽来实现音量的大小的控制以及静音的控制、

由静音转为非静音时的音量还原。

8. 皮肤控制

主要实现播放器的一系列的控制按钮的外观改变,,用户可以按照播放器的

规范定义自己喜欢的播放器的外观。

9. 已播放时间的控制

使用一个单独的线程来控制mp3的已播放时间的统计和显示,当mp3开始

播放是此线程开始运行,当mp3停止播放时,此线程结束。此线程运行期间会

首先标记一个mp3的开始播放时间,,并将计算的结果格式化为适当的时、分、

秒的格式显示在系统的播放信息控制面板上。

10. 系统配置文件

1. 用于保存播放器状态包括播放器的当前mp3索引、播放器音量、播放器

播放模式、播放器的皮肤样式等,以便启动时初始化播放器。

2. 用于保存播放器的mp3文件列表,包括mp3文件的名称和mp3文件的

绝对路径。

系统运行环境

硬件接口:Pentium 800MHZ 、内存128MB、硬盘500MB以上的PC机。

软件接口:任何支持Java(JVM)的操作系统

系统设计思想

总体流程设计

本播放器的整体流程为首先启动播放器后使用I/,,并由此初始化播放器的

状态,再进一步初始化播放器的外观包括播放模式、Swing mp3 List,、音量、上

次退出时的mp3索引等,最后播放器退出时将播放器的使用I/,。如图4-1所示

开始

读取

data

.

properties

解析

mp

3

FileList

读取

config

.

properties

初始化播放器状态

初始化播放器外观

1

.

初始化播放模式

2

.

初始化音量

3

.

初始化

mp

3

文件列表

4

.

初始化

mp

3

索引

播放器退出

保存

mp

3

文件列表

保存播放器状态

结束

图4-1 JMPlayer总体流程图

Mp3播放设计

本系统的mp3播放采用线程控制的方式来进行。设计思想为首先根据mp3

的路径查找对应的mp3文件,如果文件不存在则不做播放处理,如果文件存在

则首先检查当前播放器是否在播放mp3文件,如果正在播放则停止正在播放的

mp3线程并重新初始化mp3播放线程和相关的资源,初始化完成后开始播放。

具体流程如图4-2所示。

开始

查找

mp

3

文件

mp

3

文件存在

存在

播放器正在播放

停止播放线程

不存在

初始化播放线程

结束

图4-2 mp3播放流程图

播放模式设计

本系统中共设计了五中播放模式:单曲播放、单曲循环、列表循环播放、列

表播放、随机播放。设计思路为系统中维护一个当前正播放的mp3的索引

currentMp3Index,在当前播放的mp3播放完后,各种播放模式基于此播放索引

决定下一首要播放的mp3的index值,同时播放模式的类中维护一个对播放器的

引用。

Mp3文件列表管理设计

本系统的mp3列表管理采用配置文件( )的形式进行存储管理,采用缓存

机制进行播放器在运行时mp3文件的增加和删除管理。本系统最初对于mp3文

件的管理采用的是每次进行增加或者删除mp3文件的操作时,对进行与配置文

件的同步更行,性能非常低效,也造成了许多不必要的浪费,后来引入缓存机制

对mp3文件管理极大的提高了系统的性能。详细流程如图 4-3

所示

开始

ies是否存在

读取 ties

初始化mp3FileList

创建 ties

对mp3FileList中mp3文

件增加/删除

播放器退出

将mp3FileList中的内容

写入到ties

结束

图4-3 mp3文件列表管理流程图

歌词设计

本部分当中也采用一个独立的线程来进行歌词时间和显示的控制,,如果找

到则进一步解析此lrc歌词文件,解析完成后此线程会根据自己的独立的时间统

计来匹配解析出来的时间戳,如果匹配成功则把对应时间点的歌词显示在歌词面

板当中。具体流程如图4-4所示

开始

mp3播放

查找lyrics目录下的

对应.lyric文件

.lrc歌词文件存在

解析歌词文件到

mp3Lyrics集合中

歌词线程时间控制

歌词线程到mp3Lyrics

中进行时间点匹配

匹配成功

显示对应时间点歌词

结束

图4-4 JMPlayer歌词控制流程图

皮肤切换设计

因为设计的时间有限本系统的皮肤切换功能只是针对了系统的控制按钮的

外观进行, 如果时间能再宽裕一些可以进行针对播放器整个外观的皮肤切换的

设计和更加灵活的控制。,此处可以作为以后再研究和补充的一个设计点。皮肤

切换的设计思路为,首先到系统的皮肤目录(skin目录)下查找符合条件的皮肤

主题, 并将其显示在播放器的皮肤面板中,当选中某一种主题的皮肤后,播放器

的相应部分的外观图片会被替换成选中的主题皮肤的对应图片。具体流程如图

4-5所示

开始

到skin目录下读取

合法皮肤主题

加载合法皮肤主题

名到皮肤面板显示

皮肤选择

播放器外观图片替换

结束

图4-5 JMPlayer皮肤切换设计流程图

显示模式设计

当系统处于完全模式时,点击显示模式对应的按钮时,隐藏系统的播放信息

显示控制面板,同时设置计算播放器的位置和大小。当系统处于迷你模式时,点

击显示模式对应的按钮时,显示系统的播放信息显示控制面板,同时设置计算播

放器的位置和大小为完全模式时的大小

第五章 详细设计

界面设计

本系统的全部的界面内容包括:主控制面板,mp3列表面板,皮肤设置面板,

歌词显示面板,播放模式选择面板,系统使用了Java Swing制作了播放器的界面。

由于时间有限,加上手工对Swing组件的调整的低效,本播放器的界面并不是十

分的美观,只是做了一下简单的美化处理,如果时间充足可以对播放器的外观做

进一步的美化。图5-1为播放器的完全显示模式时的界面,图5-2为播放器迷你

模式时的界面

图5-1 JMPlayer完全显示模式界面

图5-2 JMPlayer迷你显示模式界面

系统关键类设计

1. Mp3Player类

系统的核心类,本系统的整体的类之间的通信采用了设计模式中的中介者模

式,此类即为此模式当中的中介,系统的其他部分都与此类进行交互,再由此类

做进一步的转发控制,由此降低了系统中各类之间进行相互通信的耦合性,系统

中的其他类只需要持有一个对此核心类的引用,而不必关心系统中其他类。此类

主要实现的功能为播放控制模块的主要功能,包括播放、停止播放、下一首播放、

前一首播放、静音、静音恢复等。

2. PlayerEngine类

主要以多线程的方式实现了mp3音乐播放以及对mp3音频文件信息的解析,

主要的播放操作功能是采用了JavaSoundAPI进行的,JavaSound API以各种解码

和合成器SPI(服务提供者接口,Service Provider Interface)为基础,实现各种

音乐格式的解码与转码。

在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、CD

播放器、磁带播放器等,可以在它们到达TargetDataLine之前,利用混频器控制

输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。

类似地,在处理输出音频时,混频器用来对一系列来自SourceDataLine的数据进

行混频处理,经处理后的信号可输出到各种输出端口。如图5-3所示

麦克风CDLineIn扬声器耳机LineOut

端口端口

Mixer混频器Mixer混频器

SourceDataLineClip

TargetDataLine

应用软件

图5-3 JavaSound 音频处理流程图

3. PlayerFrame类

主要用于Mp3播放器的外观显示,各种控制按钮、音量控制滚动条、播放模

式面板、皮肤切换面板、歌词面板、mp3列表面板都在此进行定义和管理。本类

以播放器的功能设计点为单位,逐步进行各个模块的初始化或加载。

4. Mp3FileController类

主要用于对mp3列表内的mp3文件的管理,包括播放器启动是的初始化和

播放器退出时的对mp3列表中数据的同步存储。此类会使用Java的io流和

Properties的load()方法store()方法相配合进行对数据的读写。

5. LyricsParser类

主要用于根据mp3进行相应的lrc格式的歌词文件的查找、解析。此类首先

到系统的歌词目录(lyrics)下查找对应的歌词文件,查找成功后会使用Java的IO

流读取歌词文件,并将歌词文件中的时间戳和歌词以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类

播放器的常量类,定义了相关操作级配置的常量。如播放器的大小,显示位

置、播放器的歌词目录、皮肤目录等等。

系统类结构

本系统的类结构如图5-5所示

图5-5JMPlayer系统类结构图

第六章

软件功能实现

播放Mp3实现

本系统中mp3的播放主要采用了JavaSoundAPI实现,以JavaSound的

AudioSystem类为主。首先由AudioSystem来获得系统的音频输入流,在获得音

频输入流成功的前提下,重置输入流的音频格式,并以此重置的音频输入流格式

来获得系统的音频line,获得音频line成功后,将mp3文件以字节流的形式循环

读取,并注入到音频输出流中,直到mp3文件字节码读取完成,以此便实现了

音乐播放。

Mp3文件解析实现

每个mp3文件的后128字节用于保存了与此mp3相关的信息,首先使用java

的随机文件读写RandomAccessFile来进行文件字节位置的跳跃,跳跃的位置为

文件的长度-128,此字节码位置即为mp3信息的开始位置,如果前三个字节

为”TAG”则说明此mp3文件保存了与mp3相关的信息,即可进行读取,3-30

字节码位置保存的是mp3的歌名,33-30保存的是mp3的艺术家,63-30保存的

为mp3的专辑,93-4字节码位置保存的为mp3的年份,所有与mp3相关的信息

读取完成后,将其封装为系统中已定义好的mp3Info实体类,返回给播放器。便

实现了mp3文件的解析。

Mp3列表控制类实现

Mp3文件列表控制类主要使用了java的list集合和Properties集合,,保存形

式为mp3绝对路径=mp3名。在播放器启动时,本类首先使用Properties类的load

方法,, 文件的读取,并以此mp3数据集合初始化播放器的mp3文件列表。在

整个播放器的运行期间所有对mp3列表中数据的操作都是在系统的

List集合上进行的,而不是每次对mp3列表中文件的操作都进行数据

文件的读取操作,此功能即为缓存的功能,极大的提高了播放器的性能。最后在

播放器退出时,,将系统中List,以备下一次的读取。

Mp3歌词解析及显示控制实现

1. 歌词解析

,如果找到则进行解析。歌词解析使用java的BufferReader类,首先以找到

的文件构造文件数据流,然后对歌词文件进行逐行读取。因为歌词文件的形式为

[分::秒.微妙],在读取出每一行后,利用java的正则表达式进行匹配,在此

正则表达式中已经定义了有效的时间格式,将读取出来的每行数据进行匹配,如

果匹配成功则将时间点作为key,时间点的歌词作为value放到properties文件中,

歌词文件读取完成后将此Properties集合类返回给主播放器控制类。

2.歌词显示控制

系统使用一个独立的线程控制mp3歌词的显示,播放器的主控制类首先判

断是否有与当前播放的mp3对应的歌词,如果有则此歌词显示控制线程随着mp3

播放的开始同时启动, 此线程在运行时首先保存一个mp3开始播放的时间点,,

即使用当前时间点-开始时间点得出的总毫秒数,由此总毫秒在分别转换为分:

秒形式的字符串格式,并到歌词文件集合中查找,如果查找成功则在播放器的歌

词面板中显示对应时间点的歌词。

结束语

通过几个月的努力,终于完成了基于java的音乐播放器JMPlayer的设计和

开发。通过对这一段时间的回顾我发现,像类似于这种的产品性质的开发,整体

来说对设计的要求是非常高的,要求软件有很高的可扩展性和可维护性。我在软

件开发和设计的过程中对一些设计思想性的东西有了更进一步的了解,比如在此

播放器中最核心的一个模式就是GOF的中介者模式,还有其它部分的策略模式、

观察者模式等;另外,我认为类的本身及其中的方法和命名也是非常的重要的。

整个项目完成我总结了两点:

1. 开发规范

刚开始编写代码的阶段没太在意这个问题,造成项目中的方法名字、变量的

名字五花八门,导致在维护的时候很吃力,到后来不得不制定出一套开发规范并

严格执行。

2. 项目的整体设计

因为此项目本身就包含很多的不确定的因素,在开发过程中经常出现一些改

动,由于在设计上欠缺功力在每次增加新功能和修改已用功能的时候都能搞的一

团乱,所以个人感觉这是我以后的一个重点的学习的方向。

参考文献

[1] 结成浩.

JAVA

多线程设计模式[

M]

.第1版.北京:中国铁道出版社,2005.177-185

[2] 秦小波.设计模式之禅.第1版北京:机械工业出版社,2010.56-82

[3] 马丁.重构-改善既有代码的设计

[M]

. 第1版. 候捷. 北京:中国电力出版社,

2003.12-79

[4] 刘亚宾.精通

Eclipse[M]

.第1版.北京:电子工业出版社,2005.10-20

[5] 汤小丹等.计算机操作系统[M]. 第3版. 西安:西安电子科技大学出版社,

[6] [M].第3版. 台湾:东南出版社,2006. 127-203

[7] 布鲁斯.

JAVA

编程思想[

M

]. 第4版. 陈昊鹏. 北京:机械工业出版社,

2007. 200-400

[8] 刘中兵. JAVA高手真经

[M]

第1版.北京:电子业出版社,2009.136-248

[9] 林智杨.精通JAVA Swing程序设计

[M]

.第1版.北京: 中国铁道出版社,2002.100-152

[10] 王鹏等.

Java Swing

图形界面开发与案例详解

[M]

.第1版.北京:清华大学出版社,

2008.123-128

[11] 格林.JAVA核心技术

[M

].第7版.叶乃文.北京: 机械工业出版社,2006.100-152

[12]

Kent Back.Test-Driven Development By Example.Addison Wesley

. July14,

2002. 26-156

致 谢

经过几个月的努力我的毕业设计已经完成。在毕业设计完成之际,我要特别

感谢我的指导老师任晓强老师的热情关怀和悉心指导。在我做设计的过程中,老

师倾注了大量的心血和汗水,无论是在设计的选题、构思和资料的收集方面,还

是在论文的撰写过程中我都得到了老师悉心细致的教诲和无私的帮助。特别是他

广博的学识、深厚的学术素养、严谨的治学精神和一丝不苟的工作作风使我终生

受益,在此表示真诚地感谢和深深的谢意。

在设计的开发过程中,也得到了许多同学的宝贵建议,在此向他们表示感谢,

感谢他们一直以来对我的关心和帮助,向大学四年一起生活得舍友们,同学们深

表感谢,感谢你们对我的关心和帮助。

同时我也要感谢所有在系统开发过程中帮助过我的同学和一些不知名的热

心网友。谢谢你们把知识传授给我。

感谢父母一直以来对我的支持和关爱,感谢所有关心、支持、帮助过我的良

师益友。

最后,我要感谢的是我的母校山东轻工业学院,向在百忙中抽出时间对本设

计进行评审并提出宝贵意见的答辩组的老师表示衷心地感谢。

2024年4月14日发(作者:陆香之)

基于JAVA的Mp3播放器JMPlayer

作 者 姓 名

专 业

指导教师姓名

专业技术职务

计算机科学与技术

讲 师

山东轻工业学院本科毕业设计(论文)原创性声明

本人郑重声明:所呈交的毕业论文,是本人在指导教师的指导下独立研究、

撰写的成果。论文中引用他人的文献、数据、图件、资料,均已在论文中加以说

明,除此之外,本论文不含任何其他个人或集体已经发表或撰写的成果作品。对

本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。

本声明的法律结果由本人承担。

毕业论文作者签名:

年 月 日

山东轻工业学院关于毕业设计(论文)使用授权的说明

本毕业论文作者完全了解学校有关保留、使用毕业论文的规定,即:学校有

权保留、送交论文的复印件,允许论文被查阅和借阅,学校可以公布设计论文的

全部或部分内容,可以采用影印、扫描等复制手段保存本论文。

指导教师签名: 毕业设计(论文)作者签名:

年 月 日 年 月 日

目 录

摘 要

.....................................................................................................

III

ABSTRACT .................................................................................... IV

第一章 引言

....................................................................................

1

课题研究背景及意义 .............................................................................. 1

音乐播发器的发展及历史 ...................................................................... 1

系统开发目标........................................................................................... 2

本文的主要内容和结构 .......................................................................... 2

第二章 相关工具及技术介绍

.....................................................

1

Eclipse简介 .............................................................................................. 3

Java Thread简介 ...................................................................................... 4

JavaSound简介 ........................................................................................ 5

Java Swing简介 ....................................................................................... 6

Java Properties简介 ................................................................................. 7

第三章 需求分析

...........................................................................

9

工作流程分析........................................................................................... 9

评价具体需求分析 .................................................................................. 9

系统功能结构图 ...................................................................................... 9

功能详细描述......................................................................................... 10

Mp3播放 ................................................................................................ 10

播放控制 ................................................................................................. 10

播放信息控制......................................................................................... 10

Mp3列表管理 ........................................................................................ 11

歌词 ......................................................................................................... 11

其他 ......................................................................................................... 11

第四章 总体设计

.........................................................................

12

系统要求 ................................................................................................. 12

系统功能描述......................................................................................... 12

系统运行环境......................................................................................... 13

系统设计思想......................................................................................... 13

总体流程设计......................................................................................... 13

Mp3播放设计 ........................................................................................ 14

播放模式设计......................................................................................... 15

Mp3文件列表管理设计 ........................................................................ 15

歌词设计 ................................................................................................. 16

皮肤切换设计......................................................................................... 17

显示模式设计......................................................................................... 18

第五章 详细设计

.........................................................................

19

界面设计 ................................................................................................. 19

系统关键类设计 .................................................................................... 20

系统类结构............................................................................................. 22

第六章 软件功能实现

................................................................

23

播放Mp3实现 ....................................................................................... 23

Mp3文件解析实现 ................................................................................ 23

Mp3列表控制类实现 ............................................................................ 23

Mp3歌词解析及显示控制实现 ............................................................ 23

结束语

...................................................................................................... 25

参考文献

................................................................................................

24

致 谢

.....................................................................................................

27

摘 要

随着java 语言的出现,软件的跨平台性已经能被更进一步的解决和处理,随

着Internet的发展,软件的跨平台性又被提高到另一个新的要求。

音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。它涵盖了各种

音乐格式的播放工具,比如:MP3播放器,WMA播放器,MP4播放器等。它

们不仅界面美观,而且操作简单,带你进入一个完美的音乐空间。

本系统是一个简单的Mp3音乐播放器实现,旨在借助于java语言的强大的

跨平台特性来实现本播放器的跨平台的通用。但由于设计时间有限目前仅支持

mp3和wav格式音乐文件的播放。

本系统的主要使用了Java中的多线程编程,系统中的mp3播放、歌词解析

及显示、播放时间的显示控制、播放器的主界面等都是单独采用一个独立的线程

来进行管理控制的。

本系统在结构上的核心设计模式采用了GOF的中介者模式,以此来使各个

模块的相互耦合度降到最低,以便更容易的进行各个模块的独立的开发从而使整

个系统的灵活性和可扩展性都得到提高。开发时采用TDD。

关键词

Java MusicPlayer multi-thread

ABSTRACT

With the development of java language, cross-platform natures of the software

have been resolved and processed can be further, as the Internet's development,

cross-platform of software has been raised to another of the new requirements.

Music player is a multimedia playback software which 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 player .With the help of java language

features that’s 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 playing, lyrics analysed and displayed, the control of play time, and the player's

main interface are all used of an individual thread.

The structure of the system's 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 more easily carry out the independently developed of each module .So the system

flexibility and scalability can be improved. The project was developed in TDD.

Key Words

Java;MusicPlayer;multi-thread

[4]

第一章 引言

课题研究背景及意义

当今时下, 随着信息技术的不断发展,软件技术的发展也是日新月异,人们

对于音乐的享受方式也是不断的发生变化,各种音乐播放软件让人们享受变的更

加的舒适,愉快和方便。基于编程语言的不同以及Internet 的发展,现在比较流

行的音乐播放的形式有软件播放像千千静定,酷我音乐盒等,在线软件播放像百

度的在线音乐盒,以及各大门户网站基本上都提供了在线收听音乐的服务。在线

收听的形式可以不依赖于操作系统的软件环境凡是能与Internet连接的计算机都

可以进行在线收听。但在收听也有它的局限性,像无法与Internet连接时。这时

候本地的音乐播放软件就显示出它的优势来了,但由于操作系统的本身软件环境

及生产厂家的限制,使用非可夸平台语言编写的音乐播放软件无法做到在操作系

统上的共用,本题目的意义在于使用java这种跨平台的语言,编写一个通用的

音乐播放软件。

音乐播发器的发展及历史

时下,音乐播放器已经成为人们生活中不可或缺的必备品。它的诞生,让动

听的声音有了存储的载体,得以广泛的传播和分享。接下来,笔者就针对它的发

展史做个简单的回顾。

1877年12月,爱迪生公开表演了留声机,“会说话的机器”诞生的消息,

立刻轰动了全世界。外界舆论马上把他誉为"科学界之拿破仑",留声机也成为

19世纪最引人振奋的三大发明之一。

1898年,,从此,以硬磁性材料为载体,利用磁性材料的剩磁特性将声音信

号记录在载体,具有重放、录音功能的磁带录音机开始在家庭普及。

随着社会的发展和科技的进步,人们对音色品质的追求越来越高。老式录音

机音色简单、苍白的特性,使其逐渐被社会淘汰。代表着更清晰、立体声、更浑

厚音质的播放器CD正式登上舞台。1982年,世界上第一台CD播放器、同时也

是索尼生产的第一台CD播放器诞生了—Sony’s CDP-101。

CD的出现,依靠完美的音质表现、快捷搜歌、方便携带等功能,风靡了播

放器市场10多年之久。直到

MP3

的出现。

尽管1995年9月9日发布的第一款实时软件MP3播放器Winplay3,已经让

许多人能够在自己的个人电脑上编码和回放MP3文件,音乐播放器的智能时代

正式来临,但是由于PC和互联网的发展所限,MP3并没有获得广泛的普及。

直到2001年10月,苹果公司推出了第一代IPOD,将MP3播放器演绎到艺

术与文化的境界。它不仅容量巨大,操作智能,而且外形时尚,一经推出,即刻

获到全球范围内的热捧!

苹果公司之所以强大,除了自身强大的研发能力和创新意识以外,善于利用

外设厂商资源,也是其成功的重要一环。在苹果的研发基地,来自全球70多家

顶尖配件厂商共同参与苹果每一款新品的研发过程。世界顶级音响制造品牌

JBL、哈曼卡顿、全球最知名的三大耳机品牌UE、ETY、WESTONE都量身为

IPOD打造完美的声音输出设备,让IPOD完美的音质得以淋漓尽致的展现。

系统开发目标

本系统的开发目标为: 开发出一个不受操作系统(此操作系统必须支持

JAVASE)限制的mp3音乐播放器。此播放器要实现一般常见播放器的一些通用的

功能。要求系统的各个模块之间尽可能的达到高内聚,低耦合,要求系统具有较

高的可维护性和可扩展性。

本文的主要内容和结构

本论文由五章构成,其中第四、五章为核心部分,讲述了系统的实现。具体

的每个章节的主要内容如下:

第一章 引言。主要介绍了课题的研究背景及意义以及系统的开发目标以及

mp3播放器的发展历史。

第二章 相关工具及技术介绍。主要介绍了Java线程、Java多线程编程,java

音乐播放的主要API—JavaSound、播放器所使用的界面API—Swing、Eclipse开发

工具。

第三章 需求分析。主要从需求的角度介绍了mp3音乐播放器的功能等。

第四章 总体设计。本章为本文的核心部分,主要介绍了mp3播放器的各个

设计点的设计思想。

第五章 详细设计。本章也是系统的核心章节之一,主要介绍了播放器的界

面设计、系统的关键类的设计以及系统的类结构。

第五章 软件功能实现。本章主要从代码的角度介绍了整个播放器的设计。

第二章 相关工具及技术介绍

Eclipse简介

Eclipse是一个非常优秀的集成开发环境。IBM花了多年的时间来开发基于

Java的公开源代码的软件Eclipse,这个在IBM支持下的开发源码项目经过一段

时期的发展完善,已经为广大Java开发者所熟悉。Eclipse是一个用于构建集成

Web和应用程序开发工具的平台,它本身并不会提供大量的最终用户功能,而是

通过插件来快速开发集成功能的部件。

Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技

术,受到了越来越多的开发者的欢迎。最新的Eclipse ,而且增加了代码折叠等

众多优秀功能,速度也有明显的提升。配合众多令人眼花缭乱的插件,完全可以

满足从企业级Java应用到手机终端Java游戏的开发。

Eclipse提供了公共用户界面模型来使用工具。Eclipse软件旨在简化用于多

操作系统软件工具的开放过程,他被设计成可以在多个操作系统上运行,基于

Eclipse的软件在Linux和微软Windows系统上都可以运行,因此可以省去开发

者有时要把Windows应用程序切换到Linux的操作,进而简化了整个开发过程。

同时Eclipse还提供了于每个底层操作系统强大集成。

Eclipse的核心是动态发现插件的体系结构。平台负责处理基本环境的后台

工作,并提供标准的用户导航模型,于是每个插件可以专注于执行少量的任务,

Eclipse的出现,不仅为Java开发者提供了免费使用强大的Java IDE的机会,而

且也为C++的开发者提供了CDT。

通过集成大量的插件,Eclipse的功能可以不断扩展,以支持各种不同的应

用。Eclipse软件可以用于管理多种开发任务,其中包括测试、性能调整以及程

序调试等,而且还可以继承来自多个供货商的第三方应用程序开发工具。此外,

Eclipse软件非常适合开发电子商务应用程序,例如IBM公司自己的面向Web服

务的WebSpbere应用程序开发工具就是建立在Eclipse基础之上。

除此之外,Eclipse平台是一个成熟的、精心设计的、可扩展的体系结构。

Eclipse的价值在于他为创建可扩展的集成开发环境提供了一个开放源码平台。

这平台允许任何人构建与环境和其他工具无缝集成的工具,而工具与Eclipse无

缝集成的关键便是插件。

Java Thread简介

线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,

如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进

程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的

入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。

进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以

有多个进程,这些进程包括系统进程(由操作系统内部建立的进程)和用户进程

(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之

间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一

个进程中的线可以共享系统分派给这个进程的内存空间。

线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段

内存空间也叫做线程栈, 是在建立线程时由系统分配的,主要用来保存线程内部

所使用的数据,如线程执行函数中所定义的变量。

Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的

多任务是通过线程来实现的。每用java命令启动一个java 应用程序,就会启动

一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这

个JVM环境中,所有程序代码的运行都是以线程来运行。

一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简

单的HelloWorld的Java应用程序时,就启动了一个 JVM进程,JVM找到程序程

序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称

之为主线程。当main方法结束后, 主线程运行完成。JVM进程也随即退出 。

对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线

程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内

存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存

块,因此进程之间的通信相对困难。

实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了

进程的并发执行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、

多进程、多线程的支持。

在Java程序中,JVM负责线程的调度。线程调度是值按照特定的机制为多

个线程分配CPU的使用权。

调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得

CPU使用权,并平均分配每个线程占用CPU的时间;抢占式调度是根据线程的

优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。所谓

的“并发执行” 、“同时”其实都不是真正意义上的“同时” 。众所周知,CPU

都有个时钟频率,表示每秒中能执行cpu指令的次数。在每个时钟周期内,CPU

实际上只能去执行一条(也有可能多条)指令。操作系统将进程线程进行管理,

轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分),然

后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之

间相互的切换去执行,这个切换时间也是非常短的。因此多任务、多进程、多线

程都是操作系统给人的一种宏观感受,从微观角度看,程序的运行是异步执行的。

Java语言的多线程需要操作系统的支持。Java 虚拟机允许应用程序并发地

运行多个执行线程。Java语言提供了多线程编程的扩展点,并给出了功能强大的

线程控制API。

在Java中,多线程的实现有两种方式:

1.

2.

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个

线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个

新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当

且仅当创建线程是守护线程时,新线程才是守护程序。

当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指

定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为

止:

1. 调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。

2. 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用

中返回,还是通过抛出一个传播到 run 方法之外的异常。

JavaSound简介

JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。

在JDK ,JavaSound是一个标准的Java扩展API,但从Java ,JavaSound就被包

含到JDK之中。由于Java有着跨平台(操作系统、硬件平台)的特点,基于

JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java +的系统

上运行,无需加装任何支持软件。

使用JavaSound API,可以实现各种基于声音的应用,例如声音录制、音乐

播放、网络电话、音乐编辑等。JavaSound API又以各种解码和合成器SPI(服

务提供者接口, Service Provider Interface)为基础,实现各种音乐格式的解码与

转码。

在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、CD

播放器、磁带播放器等,可以在它们到达TargetDataLine之前,利用混频器控制

输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。

类似地,在处理输出音频时,混频器用来对一系列来自SourceDataLine的数

据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。

SourceDataLine是一个可写入音频信号数字流的设备,例如,我们可以从一个

WAV文件读取内容写入到SourceDataLine,然后再通过扬声器输出。

Java Swing简介

Swing是一个为Java设计的GUI工具包。 Swing 是 Java API 的一部分。

Swing 包括了图形用户界面 (GUI) 器件 如:文本框,按钮,分隔窗格和表。

Swing提供许多比AWT更 好的屏幕显示元素。它们用纯Java写成,所以

同Java本身一样可以跨平台运行,这一点不像AWT。 它们是JFC的一部分。 它

们支持可更换的观感和主题(各种操作系统默认的特有主题),然而不是真的使

用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平

台 上使用Java支持的任意观感。 轻量级元件的缺点则是执行速度较慢,优点

就是可以在所有平台上采用统一的行为。

SUN把Swing定义为一组用户自定义化的图形组件,这些组件的外观样式

可以在运行时改变。实际上,Swing含义远不只此。它是Sun创建的用于java

企业级应用开发的下一代GUI工具集。这就意味着程序员可以使用Swing和一

组功能强大的组件来创建大型java应用程序。还可以方便地扩展或者修改这些

组件来控制它们的外观和行为。

基本类库是用来帮助程序员使用java创建企业级应用的一组库。JFC除了

包括Swing外,还包括AWT,Accessibility API, 2D API,并加强了对拖放功能的支

持。

Swing是建立在核心AWT库之上。Swing并不包括任何平台相关(本地)代

码,。

Swing引进了一个Action类,这使得协调GUI组件和它们的功能简单化。

尽管本身没有定义大量事件,。每一个Swing组件还包括一些外在属性。这是因

为Swing组件和JavaBeans规范有联系。这就意味着可以把Swing组件引进到各

种GUI构建工具中,这对可视化编程来说很有用处。

Swing的特性有:1)可插拔的外观样式。Swing允许用户在运行时改变外

观样式而不需要关闭应用程序。2)轻量级组件 这是指组件不依赖于本地的对等

组件来渲染它们。而是它们使用简单的图形元素来绘制自身甚至允许部分透明。

而AWT组件是“重型组件”。轻型组件使用Graphics对象的绘图元素(象

drawLine(),fillRect()等)来渲染自身。一般在包含它们的顶层重型组件表面渲染

自身。绝把部分Swing组件是轻型组件,只有一些顶层容器不是。这种设计使得

程序员可以在运行时绘制应用程序的外观。而且,Swing组件支持组件行为的简

单修改。

Swing包含250多个类,是组件和支持类的集合。Swing提供了40多个组

件,是AWT组件的四倍。除提供替代AWT重量组件的轻量组件外,Swing还

提供了大量有助于开发图形用户界面的附加组件。

1. AWT的替代组件

用于替代AWT重量组件的Swing轻量组件中许多组件与它们所替代的

AWT组件几乎是源代码兼容的。这使得替换AWT组件的工作相当简单。 除

模仿AWT组件所提供的功能外,几乎所有的Swing替代组件都有其他一些特性。

例如,Swing按钮和标签可显示图标和文本,而AWT按钮和标签只能显示文本。

该类组件均使用Windows的界面样式。

2. Swing增加的组件

除提供AWT重量组件的替代组件外,Swing还提供了许多其他组件,如表

格、树、定制对话框等。

Java Properties简介

,如Hibernate、。掌握此类文件的读写对我们理解配置文件的好处是显而

易见的

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中

加载。属性列表中每个键及其对应值都是一个字符串。

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有

的属性列表中搜索到属性键,则搜索第二个属性列表。

因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和

putAll 方法。但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不

是 Strings 的项。相反,应该使用 setProperty 方法。如果在“有危险”的

Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该

调用将失败。

load 和 store 方法按简单的面向行的格式加载和存储属性。此格式使

用 ISO 8859-1 字符编码。可以使用 Unicode 转义符来编写此编码中无法直接表

示的字符;转义序列中只允许单个 'u' 字符。可使用 native2ascii 工具对属性

文件和其他字符编码进行相互转换。

[4]

loadFromXML(InputStream) 和 storeToXML(OutputStream) 方法按简单的

XML 格式加载和存储属性。默认使用 UTF-8 字符编码,但如果需要,可以指

定某种特定的编码。XML 属性文档具有以下 DOCTYPE 声明:

properties SYSTEM ""> 注意,导入或导出属性时不访问系统 URI ();该系统

URI 仅作为一个惟一标识 DTD 的字符串。

第三章 需求分析

工作流程分析

用户希望通过音乐播放器实现mp3音乐播放的功能,同时用户可以自主的

控制播放器中的mp3的播放,包括前一首播放、下一首播放、停止播放。同时

用户希望看到当前正在播放的mp3的详细信息,比如mp3的专辑、年份、歌手

等信息,用户还想对当前播放器的整体状态有一个了解,如以播放时长等。用户

可以对播放器的音量进行控制,可以对播放器自动播放mp3的播放顺序作出选

择,可以对播放器的皮肤样式作出更改,用户肯能还想定义自己喜欢风格样式的

播放器皮肤。如果有歌词文件存在的话,用户可能希望播放器能够同步显示对应

的歌词。用户有时可能还会感觉将播放的界面变的非常小放在桌面的某个角落会

更合适一些。

评价具体需求分析

1. mp3播放 主要用于播放器的mp3音乐文件的播放。

2. 播放控制 主要用于播放器的下一首播放、前一首播放、停止播放、播放的控

制。

3. 播放信息显示控制 主要包括mp3的已播放时间、播放状态、mp3文件信息

的显示。

4. mp3列表管理 主要包括对播放器中mp3音乐文件的增加、增加时的检查和

删除。

5. 歌词解析及同步显示 主要包括对歌词文件的查找、解析和同步显示。

6. 播放模式控制 主要用于在播放器的各种播放模式之间进行切换,如循环播

放、随机播放等。

7. 显示方式控制 主要用于控制播放器的迷你模式和完全模式的切换及同步的

组件的显示和隐藏。

8. 皮肤切换控制 用于在系统的各种皮肤之间进行切换。

9. 音量控制 控制播放器的音量大小。

系统功能结构图

本Mp3音乐播放器的主要功能分为五大模块,分别是播放控制模块、播放

信息控制模块、Mp3列表管理模块、歌词模块、以及其他功能模块。在各个模

块中又包含更详细的功能划分详细内容如图3-1所示

JMPlayer

Mp3列表管理

Mp3播放

播放控制

播放信息控制

歌词

其他

M

p

3

M

p

3

M

p

3

M

p

3

图3-1 JMPlayer系统功能结构图

功能详细描述

Mp3播放

此部分为系统的核心部分,主要使用了JavaSoundAPI控制操作系统的音频

系统,以音频系统的音频输入输出流进行Mp3的播放,此部分是播放控制模块、

播放信息控制模块、歌词模块等的运行基础。

播放控制

主要进行mp3音乐文件的播放控制,主要包括常见播放器的基本的播放控制

功能如停止功能、下一首功能、前一首功能等,包括播放器的播放模式的控制(主

要实现了常用的五种播放模式:单曲播放、单曲循环、列表循环播放、列表播放、

随机播放)。模式播放的控制主要用在mp3处于播放模式控制下的音乐文件播放

完成时使用。

播放信息控制

主要进行当前播放状态的控制,如播放是处于播放还是停止状态的信息。当

前正在播放的mp3的歌手信息、mp3名称、播放的频率等信息的显示以及以播

放时间的显示控制,mp3的数据信息通过解析mp3音乐文件本身来获得。在mp3

文件的后置128字节中保存着mp3的一些基本信息。

Mp3列表管理

主要进行系统中mp3列表中音乐文件的维护。同时还包括mp3播放器在初

始启动的时候对原来列表中mp3文件的初始化以及在播放器推出的时候对现有

mp3列表中音乐文件的保存。。

歌词

本部分的主要功能为提供对具有歌词文件的mp3的歌词的播放时同步播放。

主要根据当前播放的mp3音乐文件进行对应的mp3歌词文件(.lrc)的查找,查

找到歌词文件进行解析后进行时间点的匹配,匹配成功后在恰当的时间点将歌词

显示在歌词框中。

其他

1. 显示模式

初始定义播放器具有两种显示模式:完全模式和迷你模式。系统在完全模式

时系统的主控制面板为最大化状态,系统的播放状态,播放时间,音量控制滚动

条均处于可见可操做状态。系统在迷你模式时系统的播放状态,播放时间,音量

控制滚动条均处于不可见不可操做状态。系统当中由一个模式控制按钮来控制播

放器模式的切换。

2. 音量控制

音量控制主要完成控制播放器的音量的大小以及静音的控制。音量控制按钮

准备设计为一个滑动条,根据滑动条的滚动实现播放器音量大小的增减。系统在

开始时要读取上次播放器的使用时音量并初始化到播放器的界面上,系统在退出

是要对播放器的音量进行保存以便下一次读取。

3. 皮肤切换

用于mp3音乐播放器在系统的各种皮肤之间进行切换,同时支持用户自定

的皮肤。只要用户在系统的皮肤目录下放入有效的皮肤主题,系统在进行皮肤切

换操作时会首先到系统的皮肤目录下加载所有的合法的皮肤并将其加入到系统

的皮肤面板上,当用户选择了某种皮肤样式后,播放器的皮肤会自动切换为选中

的皮肤主题相应的图片。

第四章 总体设计

系统要求

设计系统结构,根据需求分析给出的功能得出系统体系结构。如划分模块:

,而且操作过程直观、简便。

,便于模块之间独立的进行开发。

系统功能描述

本节以本播放器的功能点和功能模块单位介绍基于Java的音乐播放器

JMPlayer的总体的功能设计。

1. Mp3播放

播放器以java多线程编程设计了播放器的mp3播放,每播放一首新的mp3

音乐时都会产生一个独立的播放线程。在每播放一首新的mp3时,系统会对播

放器的状态做检查,如果有正在播放音乐的线程在运行,则首先停止此线程,并

重置播放器的状态。

2. 播放控制

主要功能包括播放、停止播放、下一首播放,播放、前一首播放

3. 播放信息控制

主要功能包括显示当前的播放状态、当前播放的音乐文件、mp3的歌手、mp3

的音频频率以及当前mp3播放时间信息的控制和显示。

4. Mp3文件列表管理

本节主要包括对mp3文件的增加、增加时对音乐文件的检查()、mp3文件的

删除以及mp3播放是播放索引的控制和增加删除mp3文件时mp3显示的下标索

引的控制。

5. 歌词

本节的主要功能包括歌词文件的查找、歌词文件的解析、歌词文件在歌词面

板中的显示。歌词显示的控制在本系统中采用一个独立的线程,此线程在mp3

开始播放是同步开始,并在得到歌词文件Properties集合后负责在歌词面板上显

示对应时间点的歌词。

6. 显示模式

主要包括完全显示模式功能和迷你显示模式功能。

7. 音量控制

主要包括通过一个滑动条的拖拽来实现音量的大小的控制以及静音的控制、

由静音转为非静音时的音量还原。

8. 皮肤控制

主要实现播放器的一系列的控制按钮的外观改变,,用户可以按照播放器的

规范定义自己喜欢的播放器的外观。

9. 已播放时间的控制

使用一个单独的线程来控制mp3的已播放时间的统计和显示,当mp3开始

播放是此线程开始运行,当mp3停止播放时,此线程结束。此线程运行期间会

首先标记一个mp3的开始播放时间,,并将计算的结果格式化为适当的时、分、

秒的格式显示在系统的播放信息控制面板上。

10. 系统配置文件

1. 用于保存播放器状态包括播放器的当前mp3索引、播放器音量、播放器

播放模式、播放器的皮肤样式等,以便启动时初始化播放器。

2. 用于保存播放器的mp3文件列表,包括mp3文件的名称和mp3文件的

绝对路径。

系统运行环境

硬件接口:Pentium 800MHZ 、内存128MB、硬盘500MB以上的PC机。

软件接口:任何支持Java(JVM)的操作系统

系统设计思想

总体流程设计

本播放器的整体流程为首先启动播放器后使用I/,,并由此初始化播放器的

状态,再进一步初始化播放器的外观包括播放模式、Swing mp3 List,、音量、上

次退出时的mp3索引等,最后播放器退出时将播放器的使用I/,。如图4-1所示

开始

读取

data

.

properties

解析

mp

3

FileList

读取

config

.

properties

初始化播放器状态

初始化播放器外观

1

.

初始化播放模式

2

.

初始化音量

3

.

初始化

mp

3

文件列表

4

.

初始化

mp

3

索引

播放器退出

保存

mp

3

文件列表

保存播放器状态

结束

图4-1 JMPlayer总体流程图

Mp3播放设计

本系统的mp3播放采用线程控制的方式来进行。设计思想为首先根据mp3

的路径查找对应的mp3文件,如果文件不存在则不做播放处理,如果文件存在

则首先检查当前播放器是否在播放mp3文件,如果正在播放则停止正在播放的

mp3线程并重新初始化mp3播放线程和相关的资源,初始化完成后开始播放。

具体流程如图4-2所示。

开始

查找

mp

3

文件

mp

3

文件存在

存在

播放器正在播放

停止播放线程

不存在

初始化播放线程

结束

图4-2 mp3播放流程图

播放模式设计

本系统中共设计了五中播放模式:单曲播放、单曲循环、列表循环播放、列

表播放、随机播放。设计思路为系统中维护一个当前正播放的mp3的索引

currentMp3Index,在当前播放的mp3播放完后,各种播放模式基于此播放索引

决定下一首要播放的mp3的index值,同时播放模式的类中维护一个对播放器的

引用。

Mp3文件列表管理设计

本系统的mp3列表管理采用配置文件( )的形式进行存储管理,采用缓存

机制进行播放器在运行时mp3文件的增加和删除管理。本系统最初对于mp3文

件的管理采用的是每次进行增加或者删除mp3文件的操作时,对进行与配置文

件的同步更行,性能非常低效,也造成了许多不必要的浪费,后来引入缓存机制

对mp3文件管理极大的提高了系统的性能。详细流程如图 4-3

所示

开始

ies是否存在

读取 ties

初始化mp3FileList

创建 ties

对mp3FileList中mp3文

件增加/删除

播放器退出

将mp3FileList中的内容

写入到ties

结束

图4-3 mp3文件列表管理流程图

歌词设计

本部分当中也采用一个独立的线程来进行歌词时间和显示的控制,,如果找

到则进一步解析此lrc歌词文件,解析完成后此线程会根据自己的独立的时间统

计来匹配解析出来的时间戳,如果匹配成功则把对应时间点的歌词显示在歌词面

板当中。具体流程如图4-4所示

开始

mp3播放

查找lyrics目录下的

对应.lyric文件

.lrc歌词文件存在

解析歌词文件到

mp3Lyrics集合中

歌词线程时间控制

歌词线程到mp3Lyrics

中进行时间点匹配

匹配成功

显示对应时间点歌词

结束

图4-4 JMPlayer歌词控制流程图

皮肤切换设计

因为设计的时间有限本系统的皮肤切换功能只是针对了系统的控制按钮的

外观进行, 如果时间能再宽裕一些可以进行针对播放器整个外观的皮肤切换的

设计和更加灵活的控制。,此处可以作为以后再研究和补充的一个设计点。皮肤

切换的设计思路为,首先到系统的皮肤目录(skin目录)下查找符合条件的皮肤

主题, 并将其显示在播放器的皮肤面板中,当选中某一种主题的皮肤后,播放器

的相应部分的外观图片会被替换成选中的主题皮肤的对应图片。具体流程如图

4-5所示

开始

到skin目录下读取

合法皮肤主题

加载合法皮肤主题

名到皮肤面板显示

皮肤选择

播放器外观图片替换

结束

图4-5 JMPlayer皮肤切换设计流程图

显示模式设计

当系统处于完全模式时,点击显示模式对应的按钮时,隐藏系统的播放信息

显示控制面板,同时设置计算播放器的位置和大小。当系统处于迷你模式时,点

击显示模式对应的按钮时,显示系统的播放信息显示控制面板,同时设置计算播

放器的位置和大小为完全模式时的大小

第五章 详细设计

界面设计

本系统的全部的界面内容包括:主控制面板,mp3列表面板,皮肤设置面板,

歌词显示面板,播放模式选择面板,系统使用了Java Swing制作了播放器的界面。

由于时间有限,加上手工对Swing组件的调整的低效,本播放器的界面并不是十

分的美观,只是做了一下简单的美化处理,如果时间充足可以对播放器的外观做

进一步的美化。图5-1为播放器的完全显示模式时的界面,图5-2为播放器迷你

模式时的界面

图5-1 JMPlayer完全显示模式界面

图5-2 JMPlayer迷你显示模式界面

系统关键类设计

1. Mp3Player类

系统的核心类,本系统的整体的类之间的通信采用了设计模式中的中介者模

式,此类即为此模式当中的中介,系统的其他部分都与此类进行交互,再由此类

做进一步的转发控制,由此降低了系统中各类之间进行相互通信的耦合性,系统

中的其他类只需要持有一个对此核心类的引用,而不必关心系统中其他类。此类

主要实现的功能为播放控制模块的主要功能,包括播放、停止播放、下一首播放、

前一首播放、静音、静音恢复等。

2. PlayerEngine类

主要以多线程的方式实现了mp3音乐播放以及对mp3音频文件信息的解析,

主要的播放操作功能是采用了JavaSoundAPI进行的,JavaSound API以各种解码

和合成器SPI(服务提供者接口,Service Provider Interface)为基础,实现各种

音乐格式的解码与转码。

在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、CD

播放器、磁带播放器等,可以在它们到达TargetDataLine之前,利用混频器控制

输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。

类似地,在处理输出音频时,混频器用来对一系列来自SourceDataLine的数据进

行混频处理,经处理后的信号可输出到各种输出端口。如图5-3所示

麦克风CDLineIn扬声器耳机LineOut

端口端口

Mixer混频器Mixer混频器

SourceDataLineClip

TargetDataLine

应用软件

图5-3 JavaSound 音频处理流程图

3. PlayerFrame类

主要用于Mp3播放器的外观显示,各种控制按钮、音量控制滚动条、播放模

式面板、皮肤切换面板、歌词面板、mp3列表面板都在此进行定义和管理。本类

以播放器的功能设计点为单位,逐步进行各个模块的初始化或加载。

4. Mp3FileController类

主要用于对mp3列表内的mp3文件的管理,包括播放器启动是的初始化和

播放器退出时的对mp3列表中数据的同步存储。此类会使用Java的io流和

Properties的load()方法store()方法相配合进行对数据的读写。

5. LyricsParser类

主要用于根据mp3进行相应的lrc格式的歌词文件的查找、解析。此类首先

到系统的歌词目录(lyrics)下查找对应的歌词文件,查找成功后会使用Java的IO

流读取歌词文件,并将歌词文件中的时间戳和歌词以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类

播放器的常量类,定义了相关操作级配置的常量。如播放器的大小,显示位

置、播放器的歌词目录、皮肤目录等等。

系统类结构

本系统的类结构如图5-5所示

图5-5JMPlayer系统类结构图

第六章

软件功能实现

播放Mp3实现

本系统中mp3的播放主要采用了JavaSoundAPI实现,以JavaSound的

AudioSystem类为主。首先由AudioSystem来获得系统的音频输入流,在获得音

频输入流成功的前提下,重置输入流的音频格式,并以此重置的音频输入流格式

来获得系统的音频line,获得音频line成功后,将mp3文件以字节流的形式循环

读取,并注入到音频输出流中,直到mp3文件字节码读取完成,以此便实现了

音乐播放。

Mp3文件解析实现

每个mp3文件的后128字节用于保存了与此mp3相关的信息,首先使用java

的随机文件读写RandomAccessFile来进行文件字节位置的跳跃,跳跃的位置为

文件的长度-128,此字节码位置即为mp3信息的开始位置,如果前三个字节

为”TAG”则说明此mp3文件保存了与mp3相关的信息,即可进行读取,3-30

字节码位置保存的是mp3的歌名,33-30保存的是mp3的艺术家,63-30保存的

为mp3的专辑,93-4字节码位置保存的为mp3的年份,所有与mp3相关的信息

读取完成后,将其封装为系统中已定义好的mp3Info实体类,返回给播放器。便

实现了mp3文件的解析。

Mp3列表控制类实现

Mp3文件列表控制类主要使用了java的list集合和Properties集合,,保存形

式为mp3绝对路径=mp3名。在播放器启动时,本类首先使用Properties类的load

方法,, 文件的读取,并以此mp3数据集合初始化播放器的mp3文件列表。在

整个播放器的运行期间所有对mp3列表中数据的操作都是在系统的

List集合上进行的,而不是每次对mp3列表中文件的操作都进行数据

文件的读取操作,此功能即为缓存的功能,极大的提高了播放器的性能。最后在

播放器退出时,,将系统中List,以备下一次的读取。

Mp3歌词解析及显示控制实现

1. 歌词解析

,如果找到则进行解析。歌词解析使用java的BufferReader类,首先以找到

的文件构造文件数据流,然后对歌词文件进行逐行读取。因为歌词文件的形式为

[分::秒.微妙],在读取出每一行后,利用java的正则表达式进行匹配,在此

正则表达式中已经定义了有效的时间格式,将读取出来的每行数据进行匹配,如

果匹配成功则将时间点作为key,时间点的歌词作为value放到properties文件中,

歌词文件读取完成后将此Properties集合类返回给主播放器控制类。

2.歌词显示控制

系统使用一个独立的线程控制mp3歌词的显示,播放器的主控制类首先判

断是否有与当前播放的mp3对应的歌词,如果有则此歌词显示控制线程随着mp3

播放的开始同时启动, 此线程在运行时首先保存一个mp3开始播放的时间点,,

即使用当前时间点-开始时间点得出的总毫秒数,由此总毫秒在分别转换为分:

秒形式的字符串格式,并到歌词文件集合中查找,如果查找成功则在播放器的歌

词面板中显示对应时间点的歌词。

结束语

通过几个月的努力,终于完成了基于java的音乐播放器JMPlayer的设计和

开发。通过对这一段时间的回顾我发现,像类似于这种的产品性质的开发,整体

来说对设计的要求是非常高的,要求软件有很高的可扩展性和可维护性。我在软

件开发和设计的过程中对一些设计思想性的东西有了更进一步的了解,比如在此

播放器中最核心的一个模式就是GOF的中介者模式,还有其它部分的策略模式、

观察者模式等;另外,我认为类的本身及其中的方法和命名也是非常的重要的。

整个项目完成我总结了两点:

1. 开发规范

刚开始编写代码的阶段没太在意这个问题,造成项目中的方法名字、变量的

名字五花八门,导致在维护的时候很吃力,到后来不得不制定出一套开发规范并

严格执行。

2. 项目的整体设计

因为此项目本身就包含很多的不确定的因素,在开发过程中经常出现一些改

动,由于在设计上欠缺功力在每次增加新功能和修改已用功能的时候都能搞的一

团乱,所以个人感觉这是我以后的一个重点的学习的方向。

参考文献

[1] 结成浩.

JAVA

多线程设计模式[

M]

.第1版.北京:中国铁道出版社,2005.177-185

[2] 秦小波.设计模式之禅.第1版北京:机械工业出版社,2010.56-82

[3] 马丁.重构-改善既有代码的设计

[M]

. 第1版. 候捷. 北京:中国电力出版社,

2003.12-79

[4] 刘亚宾.精通

Eclipse[M]

.第1版.北京:电子工业出版社,2005.10-20

[5] 汤小丹等.计算机操作系统[M]. 第3版. 西安:西安电子科技大学出版社,

[6] [M].第3版. 台湾:东南出版社,2006. 127-203

[7] 布鲁斯.

JAVA

编程思想[

M

]. 第4版. 陈昊鹏. 北京:机械工业出版社,

2007. 200-400

[8] 刘中兵. JAVA高手真经

[M]

第1版.北京:电子业出版社,2009.136-248

[9] 林智杨.精通JAVA Swing程序设计

[M]

.第1版.北京: 中国铁道出版社,2002.100-152

[10] 王鹏等.

Java Swing

图形界面开发与案例详解

[M]

.第1版.北京:清华大学出版社,

2008.123-128

[11] 格林.JAVA核心技术

[M

].第7版.叶乃文.北京: 机械工业出版社,2006.100-152

[12]

Kent Back.Test-Driven Development By Example.Addison Wesley

. July14,

2002. 26-156

致 谢

经过几个月的努力我的毕业设计已经完成。在毕业设计完成之际,我要特别

感谢我的指导老师任晓强老师的热情关怀和悉心指导。在我做设计的过程中,老

师倾注了大量的心血和汗水,无论是在设计的选题、构思和资料的收集方面,还

是在论文的撰写过程中我都得到了老师悉心细致的教诲和无私的帮助。特别是他

广博的学识、深厚的学术素养、严谨的治学精神和一丝不苟的工作作风使我终生

受益,在此表示真诚地感谢和深深的谢意。

在设计的开发过程中,也得到了许多同学的宝贵建议,在此向他们表示感谢,

感谢他们一直以来对我的关心和帮助,向大学四年一起生活得舍友们,同学们深

表感谢,感谢你们对我的关心和帮助。

同时我也要感谢所有在系统开发过程中帮助过我的同学和一些不知名的热

心网友。谢谢你们把知识传授给我。

感谢父母一直以来对我的支持和关爱,感谢所有关心、支持、帮助过我的良

师益友。

最后,我要感谢的是我的母校山东轻工业学院,向在百忙中抽出时间对本设

计进行评审并提出宝贵意见的答辩组的老师表示衷心地感谢。

发布评论

评论列表 (0)

  1. 暂无评论