音频播放器软件的设计与实现毕业论文.docx
- 文档编号:16753137
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:56
- 大小:520.42KB
音频播放器软件的设计与实现毕业论文.docx
《音频播放器软件的设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《音频播放器软件的设计与实现毕业论文.docx(56页珍藏版)》请在冰点文库上搜索。
音频播放器软件的设计与实现毕业论文
南开大学滨海学院
本科生毕业论文〔设计〕
中文题目:
音频播放器软件的设计与实现
外文题目:
TheDesignandImplementationofAudioPlayerSystem
系别:
计算机科学系
专业:
计算机科学与技术
〔数字影视动画技术与应用方向〕
完成日期:
2021年4月30日
南开大学滨海学院本科毕业论文〔设计〕诚信声明
本人郑重声明:
所呈交的毕业论文〔设计〕,题目?
基于智能卡的远程身份认证系统设计与实现?
是本人在指导老师的指导下,独立进展研究工作所获得的成果。
对本文的研究做出重要奉献的个人和团队a,均已在文中以明确方式注明。
除此之外,本论文不包含任何其他个人或团队a已经发表或撰写过的作品成果。
本人完全意识到本声明的法律结果。
毕业论文〔设计〕作者签名:
郭培赞
日期:
2011年4月5日
音频播放器软件的设计与实现
摘要
随着计算机和多媒体技术的不断开展以及个人计算机的普及,各种各样的媒体文件、媒体播放器层出不穷,而MP3〔MPEGAudioLayer3〕格式以其体积小、音质也有保证的特点成为使用最为广泛的音频格式,得到了绝大多数软件和硬件媒体播放器的支持,同时WAV格式作为无损的音频格式也独树一帜。
如今,软件市场上的媒体播放器百花齐放,如:
MediaPlayer,酷我音乐盒和千千静听等。
高音质播放和低内存消耗是各种媒体播放器所追求的目的。
本文探究性地设计实现了一个支持播放列表和LRC歌词实时显示的音频播放器的软件。
本软件用Eclipse3.2平台,java语言及其相应的音频支持插件JMF开发而成,设计思想为MVC,即Model-View-Control形式。
该播放器实现了在播放MP3的同时实时地显示LRC歌词,并且支持WAV等。
利用java开发的应用程序具有平台可移植性,可以做到Oncewrite,runeverywhere,同时有着比拟完善的功能。
论文首先介绍了java语言,MVC及JMF的根本概念,内容及章节安排。
然后,论文介绍了系统的设计目的,划分并设计了系统功能模块,包括:
播放窗口模块、播放列表管理模块、歌词实时显示模块、播放控制模块和播放信息模块等,设计了媒体文件和歌词文件的处理流程。
接着,论文介绍了本播放器的开发平台,阐述了系统各功能的详细设计与实现。
最后,论文介绍了系统的运行环境及运行效果,并对各个局部进展了图示说明。
关键词:
音频播放器平台无关javaMVCJMFEclipse
ThedesignandimplementationoftheAudioPlayerSystem
Abstract
Withtheevolvementandpopularizationofcomputerscienceandmultimediatechnology,avarietyofmediafiles,mediaplayersoftwarecomeintoappearenceoneafteranother.MP3(MPEGAudioLayer3)formatalsobecomesthemostwidelyusedfeaturesaudioformat,foritssmallsizeandsoundquality.It’ssupportedbythevastmajorityofsoftwareandthehardwaremediaplayer.WAVaudioformatsisalseofamousforitsno-damagingsoundquality.Today,mediaplayersoftwareonthemarketrisesoneafteranother,suchas:
MediaPlayer,coolboxesandTTPlayerandsoon.Thepursuitofhighqualityandlowmemoryconsumptioniscarriedonbyeverymediaplayer.
ThisarticleexplorestodesignandimplementaLRCsupportedaudioplayersoftwarewithplaylistsandreal-timedisplay.ThesoftwareusedEclipse3.2,javalanguageanditscorrespondingaudiosupportplug-insdevelopedwithJMFasthedevelopplatform.ThemaindesigningideaofthesoftwareistheMVC(theModel-View-Control)pattern.TheplayerachievedinrealtimeLRCdisplaywhileplayingMP3,andsupportsWAVandsoon.Programmesdevelopedwithjavaisplatformportability,youcando“Oncewrite,runeverywhere〞,alsohasafairlycompletefunctionality.
Thepaperfirstlyintroducesbasicconcepts,contentsandchapterarrangementofthejavalanguage,MVCandJMF.Then,thepaperdescribesthedesigngoal,andthesystemfunctionmodules,including:
Mainframemodule,listControllermodule,LRCControllermodule,theMp3ControllermoduleandMp3Statemodule.Thenextistheintroductionofthemediafilesandlyricsfilestreatmentprocess.Afterthat,thepaperintroducesthedevelopmentplatformtoexplainthevariousfeaturesofthesystemdetaileddesignandimplementation.Finally,thepaperdescribesthesystemoperationenvironmentandoperatingresults.Everyparthasaillustration.
Keywords:
AudioPlayerplatformportabilityJavaMVCEclipseJMF
摘要I
AbstractII
第1章绪论1
1.1研究背景1
1.2Java语言的特性1
第2章关于JMF技术3
2.1关于JMF技术3
2.2JMF常用类4
数据源〔DataSource〕4
媒体定位器〔MediaLocator〕4
播放器〔Player〕4
处理器〔Processor〕6
数据池〔DataSink〕7
数据格式〔Format〕7
管理器〔Manager〕8
2.3事件模型8
第3章系统架构和功能模块设计11
3.1MVC形式概述11
3.2系统目的11
3.3系统功能模块概要设计12
用户界面模块13
播放控制模块14
播放信息模块15
播放列表控制模块18
歌词控制模块18
3.4音频文件播放逻辑19
对音频文件的传递19
对歌词文件的传递20
播放控制流程21
第4章系统详细设计与实现22
4.1开发平台及环境22
4.2用户界面模块详细设计与实现22
对播放拖动条添加拖动事件监听器23
音量拖动条添加拖动事件监听器23
对鼠标点击放开事件添加监听器24
时间线程25
最小化托盘26
更新TimeLabel的小算法27
4.3播放控制模块详细设计与实现28
播放函数28
停顿函数29
下一首/上一首函数30
暂停函数30
对播放至文件播放至末尾完毕事件的处理30
4.4播放信息模块详细设计与实现32
播放信息模块32
播放列表32
歌曲信息节点33
4.5播放列表控制模块详细设计与实现35
翻开文件函数35
保存/装载列表函数36
4.6歌词控制模块详细设计与实现37
第5章系统运行环境及效果39
5.1系统运行环境39
5.2系统运行效果39
5.3缺乏与改良40
第6章完毕语41
参考文献42
致谢43
第1章绪论
1.1研究背景
随着个人电脑的普及,多媒体信息的传播和应用已经深化我们生活中的各个方面。
其中数字音频凭借着其占用存储空间小,声音质量高的特点风行全球,传统磁带和CD所统治的半壁江山已经成为了数字音频的天下。
当微软Windows的局限性和缺点开场暴露出来的同时,多样化的操作系统平台如Solaris,Linux以及MacOS等操作系统各自拥有不俗的表现以及庞大的用户群。
面对繁多的操作系统平台,一款具有通用性的音频播放软件那么是必不可少的。
本音频播放软件采用Java语言编写,旨在利用Java的平台无关性特点,做出一款通用性强、占用空间少却五脏俱全的音频播放器。
1.2Java语言的特性
首先,从面向对象的特性来看,Java是一种完全的面向对象设计语言。
Java的多态主要是建立在后期绑定〔LateBingding〕或叫动态绑定〔DynamicBinding〕根底之上的,这样Java先天就具备了对对象类型的自动判断才能。
而C++是不支持动态绑定的,绑定动作发生在编译期而不是执行期,所以C++要实现多台的效果必需要使用虚函数。
此外虽然C++语言支持封装和继承,但多态仍然是建立在编译时绑定的根底上,必需要通过虚函数实现。
不仅如此,C++语言的指针操作允许使用goto语句,容易产生歧义的多重继承等特性也使C++不能严格符合面向对象的思想。
其次,Java具有绝对的平台无关性,其使用一种虚拟机作为中间层来屏蔽平台差异。
Java的源程序经过编译产生类文件,类文件构造不同于传统的编译器生成的二进制文件,必须经过虚拟机的解释才能运行,因此Java被认为是一种解释性语言。
虚拟机作为中间层负责把编译好的类文件转换为不同平台的指令。
而对于不同的C,C++编译器,各种数据类型所占用空间有可能不一样,这种差异会影响程序的可移植性。
此外,在内存管理方面,Java在其虚拟机内部实现了垃圾内存自动回收功能,可以自动判断那些内存不再被用户使用,这样就让用户在系统设计时从繁杂的内存管理工作中解脱出来。
C和C++语言分配的内存空间必须由用户在不使用的时候进展回收,容易产生内存回收不充分的问题,形成内存破绽。
然而,Java也有瑕疵,由于是一种解释型语言,编译后的Java类文件不能直接被操作系统执行,需要虚拟机的解释,因此其效率和C,C++相比有一定差距。
在运行时,Java编写的软件需要操作系统中安装有虚拟机,所以程序的发布相对繁琐。
总的说来,
Java编程语言是
·简单与面向对象的
·分布式、平安与鲁棒的
·解释执行与高性能的
·多线程与动态执行的
Java应用程序的编译运行过程如图1-1所示
图1-1
第2章关于JMF技术
2.1关于JMF技术
JMF〔JavaMediaFramework〕,Java媒体架构,是对应Java2平台标准版(J2SE)的一种可选用的应用编程接口〔API〕软件包,它为音频和视频等媒体内容的捕获、回放、传输和编码转换等提供了一个统一的架构。
JMF技术提供了先进的媒体处理才能,从而扩展了Java平台的功能。
这些功能包括:
媒体捕获、压缩、流转、回放,以及对各种主要媒体形式和编码的支持,如M-JPEG、H.263、MP3、RTP/RTSP〔实时传送协议和实时流转协议〕、MacromediasFlash、IBM的HotMedia和Beatniks的RichMediaFormat(RMF)等。
JMF还支持广受欢送的媒体类型,如Quicktime、MicrosoftsAVI和MPEG-1等。
此外,JMF软件中包括了一个开放的媒体架构,可使开发人员灵敏采用各种媒体回放、捕获组件,或采用他们自己的定制的内插组件。
JavaMediaFramework〔JMF〕是构建在JavaSound之上的一层。
JMF实际上将JavaSound用于其音频处理。
JMF支持更多音频格式和更多回放功能,但缺少JavaSound的低层访问。
另外,标准JDK发行版不包括JMF而包括JavaSound。
JavaSound:
·添加音频和MIDI支持
·与JDK1.3及更高版本一起提供
·是轻量级的
·本身支持相对较少的音频格式〔AIFF、WAV和AU〕
·通过JavaSound的效劳供给商接口〔SPI〕可以进展扩展
JMF:
·添加对音频、视频和其它基于时间的数据的支持
·提供多种媒体格式的同步和控制功能
·当前没有与任何JDK一起提供
·本身支持许多音频格式〔AIFF、WAV等〕以及MPEG和其它格式
·包含可扩展的编码器/解码器媒体支持
2.2JMF常用类
JMF的常用类包括以下几个:
●数据源〔DataSource〕
●媒体定位器〔MediaLocator〕
●播放器〔Player〕
●处理器〔Processor〕
●数据池〔DataSink〕
●数据格式〔Format〕
●管理器〔Manager〕
数据源〔DataSource〕
在JMF中,DataSource对象就是数据源,它可以是从采集设备获得的数据,也可以是一个多媒体文件,也可以是从互联网上下载的数据流。
对于DataSource对象,一旦你确定了它的位置和类型,对象中就包含了多媒体的位置信息和可以播放该多媒体的软件信息。
当创立了DataSource对象后,可以将它送入Player对象中,而Player对象不需要关心DataSource中的多媒体是如何获得的,以及格式是什么。
媒体定位器〔MediaLocator〕
DataSource通常用两种方式来定义,媒体定位器〔MediaLocator〕或URL〔UniversalResourceLocator〕。
MediaLocator类似于URL,并且可以由URL来构造,即使在没有安装相应的协议处理机制的情况下,也能构造MediaLocator〔在Java,只有在系统上安装了URL协议的处理机制的情况下,才能构造一个URL〕。
MediaLocator用来定位采集设备、本机的媒体文件、网络上的媒体文件以及网络RTP流。
播放器〔Player〕
如图2-1所示,播放器〔Player〕对象将音频、视频数据流作为输入,然后将数据流输出到音箱或屏幕上,就像播放器读取DV带中的数据,然后将音频信号送到音箱上,视频数据送到屏幕上一样。
图2-1JMF播放器〔Player〕模型
Player对象有多种状态,JMF中定义了Player有六种状态,如图2-2所示。
在正常情况下Player对象需要经历每个状态,然后才能播放多媒体。
下面是对这些状态的说明。
图2-2播放器的状态转换图
●Unrealized:
在这种状态下,Player对象已经被实例化,但是并不知道它需要播放的多媒体的任何信息。
●Realizing:
当调用realize()方法时,Player对象的状态从Unrealized转变为Realizing。
在这种状态下,Player对象正在确定它需要占用哪些资源。
●Realized:
在这种状态下Player对象已经确定了它需要哪些资源,并且也知道需要播放的多媒体的类型。
●Prefetching:
当调用prefetch()方法时,Player对象的状态从Realized变为Prefetching。
在该状态下的Player对象正在为播放多媒体做一些准备工作,其中包括加载多媒体数据,获得需要独占的资源等。
这个过程被称为预取〔Prefetch〕。
●Prefetched:
当Player对象完成了预取操作后就到达了该状态。
●Started:
当调用start()方法后,Player对象就进入了该状态并播放多媒体。
当一个播放器从一个状态转换到另一个状态时,它将产生TransitionEvent事件〔详细请看2.3事件模型〕。
通过ControllerListener接口,你的程序可以确定播放器在什么状态并作出相应的反响。
使用这种事件报告机制,你可以在调用播放器的方法前确定播放器是否在其适当的状态。
为了防止混乱情况,在一个播放器所有状态下,不是所有的方法都能被调用的。
假如你在一个播放器对象的当前状态下,调用了一个非法的方法,播放器对象将抛出异常或错误。
处理器〔Processor〕
处理器〔Processor〕对应的接口是Processor。
在JMFAPI中Processor接口继承了Player接口。
Processor同样可以用来播放媒体数据。
它是一种特殊的播放器,它可以对输入媒体流进展过程控制。
处理器支持所有播放器拥有的播放控制功能。
如图2-3所示,除了将媒体数据传送至播放终端外,处理器可以将媒体数据输出至一个数据源〔DataSource〕,使用Processor的getDataOutput()方法实现,此数据源可以作为其它的播放器的数据源,或是通过其它的处理器对其进展进一步操作控制,或将其作为数据池〔DataSink〕的参数,利用数据池或存储到一个文件,或传送到网络中去。
图2-4处理器模型
如图2-4所示,除了在播放器中提到了的6种状态以外,处理器对象还包括两种新的状态。
这两种状态是在Unrealized状态之后,在Realizing状态之前。
●Configuring:
当调用configure()方法后,处理器对象进入该状态。
在该状态下处理器对象连接到数据源并获取输入数据的格式信息。
●Configured:
当完成数据源连接,获得输入数据格式的信息后,处理器对象就处于Configured状态。
图2-4处理器的状态转换图
数据池〔DataSink〕
数据池〔DataSink〕用来读取数据源〔DataSource〕的媒体数据和输出到特定的目的地——这里的目的地不同于以上所说的如音箱或屏幕。
一个特定的DataSink或把数据输出到一个文件,或通过网络传输数据,或进展RTP播送。
像Player一样,DataSink对象以DataSource作为参数,通过管理器〔Manager〕来构造。
数据格式〔Format〕
在JMF架构中,数据格式〔Format〕对象中保存了媒体的格式〔format〕信息。
它并不包括编码参数和全局时间信息。
只是描绘了该格式的编码名称和数据类别。
Format的子类包括AudioFormat和VideoFormat类,VideoFormat又有六个子类:
H261Format、H263Format、IndexedColorFormat、JPEGFormat、RGBFormat和YUVFormat类[4]。
在AudioFormat中,描绘了音频格式的属性,如采样频率、每次采样的数据位数等等。
在VideoFormat中那么描绘了视频数据的类型如H.263等。
图2-5表示JMF对音频格式和视频格式的定义:
图2-5JMF的媒体数据格式
管理器〔Manager〕
JMF提供了下面四种管理器〔Manager〕:
●Manager:
Manager相当于两个类之间的接口。
例如当你需要播放一个DataSource对象,你可以通过使用Manager对象createPlayer()方法创立一个Player对象来播放它。
使用Manager对象可以创立Player、Processor、DataSource和DataSink对象。
●PackageManager:
该管理器中保存了JMF类注册信息。
●CaptureDeviceManager:
该管理器中保存了截取设备的注册信息。
●PlugInManager:
该管理器中保存了JMF插件的注册信息。
2.3事件模型
JMF利用事件报告机制来使基于JMF的程序获知媒体系统当前的状态,从而使程序可以对相应状态的改变作出相应的操作。
在任何时候,当一个JMF对象需要报告当前的状态,它将发出一个MediaEvent事件。
MediaEvent的子类包括ControllerEvern,DataSinkEvent,GainChangeEvent,RTPEvent。
对于任何一个能发送MediaEvent的JMF对象而言,JMF都定义了一个相应的侦听接口(listenerinterface)。
为了能在某一MediaEvent事件发生时得到相应的通知,必须实现适当的侦听接口以及在对应的类体中重写该接口中处理MediaEvent事件的方法体,并通过调用addListener方法来接收此MediaEvent事件。
如图2-6所示,JMF中的Controller对象,例如播放器〔Player〕和处理器〔Processor〕,以及Control对象,例如GainControl都可以发出MediaEvent事件。
〔Player和Processor继承于Controller类〕
图2-6JMF的事件模型
图2-7JMFController事件
图2-7列出了所有的Controller事件,ControllerEvent由Controller〔如Player或Processor〕产生,可分为三类:
改变通知〔changenotification〕,关闭事件〔closedevent〕,状态转变事件〔transitionevent〕:
1.改变通知事件如RateChangeEvent,DurationUpdateEvent,FormatChangeEvent说明一些Controller的属性的改变。
2.状态转变事件可以使你的程序对Controller对象的状态转变作出反响。
Player当从一个状态转为另一状态时都会产生transitionevents。
3.当Controller关闭时,它将产生关闭事件。
第3章系统架构和功能模块设计
3.1MVC形式概述
MVC架构是“Model-View-Controller〞的缩写,即将“模型-视图-控制〞作为应用程序构成的三要素。
Event〔事件〕导致Controller改变Model或View,或者同时改变两者。
只要Controller改变了Models的数据或者属性,所有以来的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音频 播放 软件 设计 实现 毕业论文