Mac平台下MP3播放器的实现毕业设计.docx
《Mac平台下MP3播放器的实现毕业设计.docx》由会员分享,可在线阅读,更多相关《Mac平台下MP3播放器的实现毕业设计.docx(52页珍藏版)》请在冰豆网上搜索。
Mac平台下MP3播放器的实现毕业设计
摘要
伴随着苹果公司的再次崛起,在Mac平台下做应用开发再次火爆起来,本系统正是在这个背景下开发的。
本系统就是在Mac平台下开发的音乐播放系统,能够实现MP3(MPEGAudioLayer3)播放器的日常需求。
系统的开发是基于MacOSX的Cocoa框架技术,使用的开发语言是Objective-C。
Cocoa就是苹果提供的一套API,通过调用其中的接口,重写其中的方法来实现需要的功能。
本系统遵循苹果的界面标准。
界面要求简洁,界面的菜单提示必须都是苹果风格的,色彩不要过于丰富。
力求让使用者得到舒心的体验。
本系统主要有五个模块,其中播放控制和列表管理是两大核心模块。
播放控制主要实现:
音乐的播放、音乐暂停、播放模式控制、上一首、下一首控制、歌曲音量调节。
歌曲列表管理模块主要实现:
显示选中的歌曲、显示正在播放的歌曲、歌曲列表的排序、歌曲队列的添加、删除、用鼠标拖放歌曲到列表、移除播放列表。
本系统的开发,设计是基础,功能是重点。
主要向大家介绍了Mac平台及其相关开发工具和使用到的技术。
系统的功能介绍也很详细。
关键字:
苹果平台,MP3播放器,Cocoa
Abstract
AlongwithAppleriseagain,intheMacapplicationdevelopmentplatformtodoitagainhot,thesystemisdevelopedinthiscontext.ThesystemisdevelopedundertheMacplatform,musicplayersystemthatcanachievethedailyneedsofMP3players.
SystemdevelopmentisbasedonMacOSX'sCocoaframeworktechnology,theuseofthedevelopmentlanguageisObjective-C.CocoaisAppleprovidesasetofAPI,wepassoneoftheinterfaces;overrideoneofthewaystoachievethatweneedtofunctionality.
ThesystemisbasedonApple'sinterfacestandard.Interfacemustbesimple,theinterfacemenuispromptstoApple’sstyle;colorshouldnotbetoorich.Itallowsuserstogetcomfortableexperience.
Thesystemhasfivemodules,whichcontrolandplaylistmanagementarethetwocoremodules.Playcontrolismainlyachieved:
themusicplayer,musicpause,playmodecontrol,ontheone,nextcontrol,andmusicvolumeadjustment.Songlistmanagementmoduletoachieve:
Displaytheselectedsongstoshowthecurrentlyplayingsong,songlistissorted,thesongqueues,add,delete,draganddropsongstothelistwiththemouse,removetheplaylist.
Forthissystemdevelopment,designisthebasis,functionisthekey.MainlytointroducetheMacplatformanditsassociateddevelopmenttoolsandtechnologiesused.Functionofthesystemdescriptionisalsoverydetailed.
Keywords:
Appleplatform,MP3Player,Cocoa
第1章绪论
1.1MP3技术现状研究
随着计算机和多媒体技术的不断发展以及个人计算机的普及,各种各样的媒体文件、媒体播放器层出不穷,而MP3格式以其体积小、音质好的特点成为使用最为广泛的音频格式,得到了绝大多数软件和硬件媒体播放器的支持。
1986年,德国人卡尔因茨·布兰登堡率先提出了一个数字音乐压缩技术的构想。
布兰登堡认为:
“可以通过一种编码重组技术将音频文件大幅度压缩,然后在播放的时候使用专门的解码技术进行还原,达到减小体积保持音质的目的。
”一年之后,布兰登堡成功地将一首《骑兵进行曲》的CD音乐压缩到原来的五分之一,但由于电脑速度过慢,无法正常解码。
1990年,一家成功开发了MPEG-1的音频研究机构,为他提供了一个研究小组。
在这年年底,改良后能够真正运行的MP3技术终于被开发出来了。
在实际测试中,音频文件的压缩和解码都非常顺利,能够把CD音质的音乐文件压缩到原来大小的1/12,实现数字音乐实时压缩。
布兰登堡敏锐意识到这是一个巨大市场,于圣诞节向德国政府申请专利。
1993年,MP3技术又得到国际标准组织(ISO)认可,从而成为主流音频格式。
MP3应该算目前使用用户最多的有损压缩数字音频格式了。
它的全称是MPEG(MPEG:
MovingPictureExpertsGroup)AudioLayer-3。
早期的MP3编码采用的是固定编码率的方式(CBR),我们常看到的128KBPS,就是代表它是以128KBPS固定数据速率编码——可以提高这个编码率,最高可以到320KBPS,音质会更好,自然,文件的体积会相应增大。
因为MP3的编码方式是开放的,你可以在这个标准框架的基础上自己选择不同的声学原理进行压缩处理,所以,很快由Xing公司推出可变编码率的压缩方式(VBR)。
它的原理就是利用将一首歌的复杂部分用高bitrate编码,简单部分用低bitrate编码,通过这种方式,进一步取得质量和体积的统一。
MP3压缩编码使用了5种重要的技术:
最小听觉门限判定(MinimalAuditionThreshold)、掩蔽效应(MaskingEffect)、位储存槽(ReservoirofBytes)、联合立体声(JointStereo)和霍夫曼编码(HuffmanCode)。
最小听觉门限判定是一种减少信息量的手段,可以将大部分记录信息集中在人耳最敏感的2~5kHz范围,其余频率则分配较少的容量记录。
掩蔽效应是一种心理声学模型,在听觉上表现为有一个音量或音色特别突出的声音出现时,其它细小的声音会变得难以被察觉,因而没有必要对所有的声音细节都进行编码,而只需对容易引起注意的声音编码。
位储存槽是MP3的流量属性,分为恒定比特率(CBR)和可变比特率(VBR)。
CBR指文件每秒的信息流量固定不变,常见的MP3音频都是以CBR方式编码的,其优点是压缩速度快;缺点是由于每秒的信息流量相同,容易造成空间的浪费。
VBR指文件每秒的信息流量可以变化,其优点是在信号复杂时用较多的容量记录,信号简单时用较少的容量记录以有效利用空间。
通过位储存槽,将CBR编码的MP3音频,在波形简单时用较少的容量记录,把多余的空间用于记录复杂的波形,维持流量的大小,以达到近似于VBR编码的效果。
而用VBR编码的MP3音频则不需要位储存槽。
联合立体声是一种立体声编码技术,主要分为强度立体声(IntensityStereo,IS)和中侧立体声(Mid/SideStereo,M/S)两种。
IS在流量比较低时使用,利用人类听觉系统对高频信号相位分辨能力不强的特点,将音频信号中的低频分离出来合成单声道信息,其余的高频信息合成另一个单声道信息,并通过另外记录高频信号的位置信息来重建立体声效果。
M/S常被用于左右声道大体相似的情况,先将左右声道相加(L+R)得到一个声道,再将左右声道相减(L-R)得到另一个声道,然后将这两个声道信息通过心理声学模型和滤波器处理。
M/S与IS一样,是以损失部分相位信息为代价而获得较高音色记录信息的方法。
一般地,在MP3音频编码中M/S和IS是交替使用的,视信息内容和流量而定。
如果是更高流量如160kb/s以上的MP3音频,则可以对立体声的两个声道独立编码,以保存相位信息。
霍夫曼编码是一种常见的无失真压缩方案。
在脉冲编码调制信号(PCM)被分成多个临界频带并经过以上处理后,经过混合多相修饰离散余弦变换(MDCT),将波形转换为一连串的系数,最终经过霍夫曼编码再次实现压缩。
1.2苹果平台进展
1.2.1苹果平台历史介绍
MacOS是一套运行于苹果Macintosh系列电脑上的操作系统。
MacOS是首个在商用领域成功的图形用户界面。
MacOS可以被分成操作系统的两个系列:
一个是老旧且已不被支持的“Classic”MacOS(系统搭载在1984年销售的首部Mac与其后代上,终极版本是MacOS9)。
采用Mach作为内核,在MacOS8以前用“Systemx.xx”来称呼。
新的MacOSX结合BSDUnix、OpenStep和MacOS9的元素。
它的最底层建基于Unix基础,其代码被称为Darwin,实行的是部分开放源代码。
从1984年System1.0开始,到1987年的system2.0,是苹果早期的系统。
System1.0是苹果随同Macintosh128K的最初电脑操作系统,发布于1984年1月,是第一个麦金塔操作系统。
当时的System1.0含有桌面、窗口、图标、光标、菜单和卷动栏等项目。
全体系统文件夹仅216K。
System2.0是在1985年的4月发布的,2.0只是1.0的一个更新而已,没什么太大的变化。
后来苹果又分别在在1988年、1991年推出了System6、system7系统。
1997年7月26日发布的MacOS8.0带来multi-threadFinder,三维的Platinum界面,以及新的电脑帮助系统。
此时苹果才开始慢慢的开启了它的另外一个时代。
1999年10月23日苹果发布了MacOS9是MacOS8.6的改进版本。
MacOSX一代全新的产品,具有划时代的意义。
诞生于2001年3月24日。
MacOSX使用基于BSDUnix的内核,并带来Unix风格的内存管理和抢占式多任务处理(pre-emptivemultitasking)。
大大改进内存管理,允许同时运行更多软件,而且实质上消除了一个程序崩溃导致其它程序崩溃的可能性。
这也是首个包括“命令行”模式的MacOS,除非执行单独的终端工具程序,否则你可能永远也见不到。
到今天,距离苹果2001年3月24日发布了第一代MacOSX10.0Cheetah(猎豹)系统,到现在已经整整过去了十年的时间,从当初不完善的系统功能,到不断求新突破的今天,MacOSX的版本变迁见证了苹果发展的十年历程。
MacOSX也在这十年之间陆续推出了8个版本。
现在最新一代的MacOSX10.7Lion雄狮的系统也正在测试阶段,预计今夏将推出正式版本。
这些平台的变迁都是针对苹果的iMac的。
苹果这30年起起落落,曾经辉煌过,但是由于种种原因,它有段时间没落了,但是苹果一直在不断调整,一直在专心做自己的产品。
当现在它又回到我们大家的视线中来的时候,它改变了世界IT行业的格局,苹果的三大产品分别深刻的改变了三类内容市场——iPod之于音乐市场、iPhone之于应用市场、iPad之于电子书市场。
它开始为用户创造着需求,让我们明白原来可以用这个产品干这样的事情,原来产品可以这样用。
它的耀眼光芒使它再次站在世界之巅。
苹果的产品总能够让我们拥有最好的用户体验。
1998年,苹果以iMac实现了公司复兴,2001年iPod诞生,改变了MP3播放器的时代。
iMac和iPod现在早已成为苹果公司的传奇产品。
这两个产品真正实现了苹果巨人的复活,使得苹果时代又一次到来了。
现在iPad会成为苹果公司的下一个传奇吗?
就目前的状况看iPad正在通往传奇的路上越走越远。
1.2.2苹果系统与WINDOWS系统的区别
MacOSX与Windows在架构与开发环境上最大的不同点在于:
MacOSX基于UNIX;MacOSX主要开发工具X-code使用GCC作为编译程序,与其他种类的UNIX相同;不过MacOSX也有独树一格的“bundle”软件包装格式这样的东西,成为它与其他操作系统不同之处。
Windows和MacOSX都属于现代的操作系统,所以Windows在操作系统层级所提供的功能──执行文件与链接库加载、多任务与多线程、内存管理等在MacOSX上都找得到对等的API和作法。
不过,相较于Windows在微软独力开发下,架构和API都维持着相对的一贯性(另一方面,也背负着各种历史遗迹和向下相容的包袱),MacOSX则是底层源自NeXTSTEP的Mach微核心(现在称为XNU),而应用层(用准确的UNIX术语来说叫userland)来自FreeBSD4。
MacOSX透过这样的架构,才拥有和一般Linux/FreeBSD相似的UNIX应用环境。
有相当多Mac软件开发者喜欢在UNIXshell下工作,使用各种UNIX工具。
而在Windows上,必须加装Cygwin之类的环境才能办到。
MacOSX受益自UNIX环境之处不少。
尤其,Apple使用了大量的opensource工具。
举例来说,Apple不像微软,没有自己的C语言编译工具,Apple用的是UNIX业界的标准─opensource的GCC(其中当然有不少OSX的扩展功能就是)。
虽然Apple有自己的开发环境Xcode,但是底层采用GCC这件事对开发者来说是相当重要的。
同时,Apple的C/C++链接库用的也是GCC标准的stdc/stdc++。
但是MacOSX并不完全是UNIX。
它的GUI环境(Aqua)就完全不是一般Linux/FreeBSD所使用的X11。
而在UNIX层之下的微核心也和其他UNIX不同。
接下来这一点很重要:
MacOSX虽然有和Windows.EXE和.DLL相对应的文件(MacOSX跟其他UNIX一样,可执行文件一般不加扩展名,UNIX系的动态加载链接库则冠以.dylib),但更重要的架构差异是bundle。
Bundle概念承袭自NeXTSTEP。
简单来说,就是由操作系统提供一种类似对象封装的文件包裹。
MacOSX上最常见的bundle要属.app结尾的应用程序了。
虽然.app外观上是个文件,在UNIXshell下看就能发现它其实是个目录,内含各种metadata(通常至少会有一个名为Info.plist的数据文件)、可执行文件、动态链接模块、各种资源等。
除了.app外,OSX的各种框架档(以.framework结尾,是一种同时包含头文件及链接库的包装)、应用程序的外挂模块(通常以.bundle结尾)等等,都是以bundle形式呈现的。
如表1就是MacOSX和windows的一些主要差别。
表1MacOSX和Windows比较
项目
Windows
Mac
操作系统最新版本
Windows7
MacOSX10.6
操作系统核心
NTKernel
XNU
CLIshell环境
CMD.EXE
UNIXshell
GUI(shell环境)
WindowsExplorer
Aqua(Finder)
用来辨认软件组织的方式
GUID
Bundleidentify
厂商提供的开发环境
VisualStudo
X-code
可视化的GUI制作工具
VisualSudio内建的WinFormdesigner
InterfaceBuilder
C编译工具
MicrosoftCCompiler
GCC
操作系统服务
WIN32API
从POSIXlayer用stdc/c++取用
续表1
项目
Windows
Mac
系统核心服务
WIN32API
CoreFoundation/CoreServices
面向对象的API
.NETFramework/MFC
Cocoa
桌面应用程序的数据库方案
ODBC/ADO.net
AppKit和CocoaGraphics
基本绘图系统使用的单位
Pixel(GDI)
Point(Quartz)
主要开发语言
C/C++/C#
Objective–C/C++,C/C++
系统内部编码
Unicode(UTF-16)
Unicode(文件系统使用UTF-8,系统API使用CFString/NSString,内部使用UTF-16)
应用程序的设定管理方式
Windowsregistry
Propertylistfiles
脚本语言支持
VBScript/JScript/CScript/DOSBatchscript
AppleScript/perl/Ruby/shellscript/Python
数据结构与容器
System.collections
NSArray/NSDictonary/etc
1.3开发此项目的背景和意义
近几年苹果公司再度崛起,强势回归。
随着苹果风暴再次席卷全球,苹果旗下产品的火爆和热卖。
于是在苹果平台之下的应用一下子变的多了起来。
尤其在欧洲和北美,苹果的市场需求量之大让人感到不可思议。
苹果公司的网上应用商店AppStore的软件产品更加是琳琅满目,上面有很多都是苹果发烧友开发的应用,为大家提供方便和更多的选择。
本选题正是基于当今最火爆的平台,通过在苹果的Mac平台下一个mp3播放器的实现,熟悉在Mac平台下多媒体软件的开发。
满足在苹果操作系统上日常的音乐播放需求。
MacOSX目前最新的版本是10.6,它作为一款先进的操作系统是基于稳定的Unix内核而构建起来的。
苹果的核心技术coretechnology包括了CoreImage、CoreVideo、CoreAudio和CoreAnimation都为不同类型的媒体提供先进的操作支持。
苹果用OpenGL技术来渲染3D图像,OpenGL被MacOSX同时用作独立的图形加速的和系统图形加速实现,所以苹果公司产品的界面看起来总是如此的绚丽迷人。
苹果公司的应用程序框架层(ApplicationFrameworks)内嵌了用于构建应用程序的各种技术,它的核心是用于开发程序的基础环境:
Cocoa、Carbon和Java等。
各种环境的设计是为了让熟悉某一种环境的开发人员能够有施展的平台。
比如:
Cocoa和Java分别使用Objective-C和Java语言提供面向对象的开发环境,而Carbon提供基于C/C++语言的开发环境。
这一层同样提供其他大量的辅助框架技术,比如CoreData(用于帮助开发人员快速管理数据模型与关系)、AddressBook(与系统的地址簿程序进行沟通)等等。
可以通过X-code来组织和编辑源代码、编译并调试程序、查看文档或构建不同类型的软件。
除了X-code,MacOSX也提供您一整套开源的解决方案,比如GNUCompilerCollection(GCC)。
命令行构建工具也一应俱全,包括makefile、gdbdebugger、分析工具、性能调试工具、源代码管理工具和其他许多编程工具。
1.4本文研究的内容和结构
本文研究的主要内容就是Mac平台下一个MP3播放器的实现。
在苹果的iMac上运行软件,实现一般mp3和wma格式的音乐文件的播放。
系统包括本地音乐管理、播放控制、歌曲列表管理、歌曲信息管理和底层支持五大模块。
本地音乐管理包括:
浏览本地文件夹,添加本地音乐到播放列表;播放控制包括:
音乐的播放、音乐的暂停,播放模式控制,上一首、下一首控制,歌曲音量调节;歌曲列表管理管理包括:
显示选中的歌曲,显示正在播放的歌曲,歌曲列表的排序,歌曲队列的添加;歌曲信息管理只用来管理歌曲的详细信息,例如:
艺术家、歌曲时长、专辑信息、码率、音轨等。
底层支持模块就是实现mp3文件的编解码。
论文结构如下:
第1章,绪论,介绍开发此项目的背景、目的、意义。
第2章,讨论本系统实现的关键技术。
首先总体介绍苹果的开发平台Objective-C和Cocoa框架,然后详细说明了系统实现的技术关键,最后说明了设计本系统需要的硬件和软件支持。
第3章,系统需求分析以及开发遇到的技术难点问题。
第4章,详细介绍每个功能模块的实现。
第2章关键技术
2.1Objective–C特点
Objective-C,是C的衍生体,继承了所有C语言的特性,但是它们不是继承于C的语言特性本身。
Objective-C的运行环境库(RuntimeLibrary)完全是由C编写的,因此任何一个Objective-C消息派发(MessageDispatching),都会被替换成Objective-C运行环境中的某个或某几个C函数的调用。
这种机制为Objective-C带来了高效的消息派发和对C代码完全原生的兼容。
Objective-C实际上是C的超集,Objective-C就是拥有一个面向对象层(ObjectOrientedLayer)的C。
而Objective-C正是通过从Smalltalk进化而来的这种语法,实现了对这个面向对象层的支持。
Objective-C和C++不同,它不包括命名空间机制(namespacemechanism)。
取而代之的是程序设计师必须在其类名称加上前缀,以免引致冲突。
在Cocoa编程环境中,所有MacOSX系统类和函数均有“NS”作为前缀,例如NSObject或NSButton来清楚分别它们属于MacOSX核心,使用“NS”是由于这些类别的名称在NEXTSTEP开发时定下的。
和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。
亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。
Categories(分类)和protocols(协议)不但可以提供很多多重继承的好处,而且避免了很多麻烦。
和C++另外一个很明显的不同就是Objective-C在没有设定存取权限(protected,public,private)时,预设的存取权限为protected。
并且在自己的类之间尽量使用低耦合的联合依赖关系,而少用高聚合的继承关系,增强模块之间的独立性。
Objective-C和C++的对象模型和层次结构是截然不同相互独立的。
Objective-C是一门动态性很强的语言。
编译器保留了绝大部分信息,使得在运行阶段能使用这些信息进行动态绑定。
下面是一个Objective-C程序的典型结构