1、 届普通本科毕业论文(设计) 存档编号: 毕业论文(设计)题目: Mac平台下MP3播放器的实现 专 业: 网络工程 院 系: 信息管理学院 年 级: 2009级 学 号: 0932220 姓 名: 钟 臣 指导教师: 宋 莺 职 称: 讲 师 湖北经济学院教务处 制目 录摘 要IIIAbstractIV第1章 绪论11.1 MP3技术现状研究11.2苹果平台进展31.2.1 苹果平台历史介绍31.2.2 苹果系统与WINDOWS系统的区别41.3开发此项目的背景和意义61.4 本文研究的内容和结构7第2章 关键技术92.1 Objective C 特点92.2 Cocoa框架技术介绍102.
2、3 Cocoa常用的设计模式112.4 系统实现关键点122.4.1 Notification122.4.2 Delegate122.4.3 KVC和KVO132.4.4 Categories132.5 MP3格式详细介绍13第3章 系统需求与总体设计153.1 软件需求分析153.2 MP3播放器实现的主要功能163.3 实现的技术难点173.3.1 outlineView打开系统文件夹,添加音乐173.3.2 ImageCell的重绘173.4开发需要的硬件软件支持183.4.1 开发硬件支持183.4.2 X-code开发工具18第4章 MP3播放器系统模块详细介绍214.1 本地音乐管
3、理模块介绍214.2 播放控制模块介绍224.3 歌曲列表管理介绍244.4 歌曲信息管理介绍27结束语29参考文献30致 谢31附 录32III摘 要伴随着苹果公司的再次崛起,在Mac平台下做应用开发再次火爆起来,本系统正是在这个背景下开发的。本系统就是在Mac平台下开发的音乐播放系统,能够实现MP3 ( MPEG Audio Layer 3 ) 播放器的日常需求。系统的开发是基于Mac OS X的Cocoa框架技术,使用的开发语言是Objective-C。Cocoa就是苹果提供的一套API,通过调用其中的接口,重写其中的方法来实现需要的功能。本系统遵循苹果的界面标准。界面要求简洁,界面的菜
4、单提示必须都是苹果风格的,色彩不要过于丰富。力求让使用者得到舒心的体验。本系统主要有五个模块,其中播放控制和列表管理是两大核心模块。播放控制主要实现:音乐的播放、音乐暂停、播放模式控制、上一首、下一首控制、歌曲音量调节。歌曲列表管理模块主要实现:显示选中的歌曲、显示正在播放的歌曲、歌曲列表的排序、歌曲队列的添加、删除、用鼠标拖放歌曲到列表、移除播放列表。本系统的开发,设计是基础,功能是重点。主要向大家介绍了Mac平台及其相关开发工具和使用到的技术。系统的功能介绍也很详细。关键字:苹果平台, MP3播放器,CocoaAbstractAlong with Apple rise again, in
5、the Mac application development platform to do it again hot, the system is developed in this context. The system is developed under the Mac platform, music player system that can achieve the daily needs of MP3 players. System development is based on Mac OS Xs Cocoa framework technology, the use of t
6、he development language is Objective-C. Cocoa is Apple provides a set of API, we pass one of the interfaces; override one of the ways to achieve that we need to functionality.The system is based on Apples interface standard. Interface must be simple, the interface menu is prompts to Apples style; co
7、lor should not be too rich. It allows users to get comfortable experience.The system has five modules, which control and play list management are the two core modules. Play control is mainly achieved: the music player, music pause, play mode control, on the one, next control, and music volume adjust
8、ment. Song list management module to achieve: Display the selected songs to show the currently playing song, song list is sorted, the song queues, add, delete, drag and drop songs to the list with the mouse, remove the playlist.For this system development, design is the basis, function is the key. M
9、ainly to introduce the Mac platform and its associated development tools and technologies used. Function of the system description is also very detailed. Key words: Apple platform, MP3 Player, Cocoa42第1章 绪论1.1 MP3技术现状研究随着计算机和多媒体技术的不断发展以及个人计算机的普及,各种各样的媒体文件、媒体播放器层出不穷,而MP3格式以其体积小、音质好的特点成为使用最为广泛的音频格式,得到
10、了绝大多数软件和硬件媒体播放器的支持。1986年,德国人卡尔因茨布兰登堡率先提出了一个数字音乐压缩技术的构想。布兰登堡认为:“可以通过一种编码重组技术将音频文件大幅度压缩,然后在播放的时候使用专门的解码技术进行还原,达到减小体积保持音质的目的。”一年之后,布兰登堡成功地将一首骑兵进行曲的CD音乐压缩到原来的五分之一,但由于电脑速度过慢,无法正常解码。1990年,一家成功开发了MPEG-1的音频研究机构,为他提供了一个研究小组。在这年年底,改良后能够真正运行的MP3技术终于被开发出来了。在实际测试中,音频文件的压缩和解码都非常顺利,能够把CD音质的音乐文件压缩到原来大小的1/12,实现数字音乐实
11、时压缩。布兰登堡敏锐意识到这是一个巨大市场,于圣诞节向德国政府申请专利。1993年,MP3技术又得到国际标准组织(ISO)认可,从而成为主流音频格式。MP3应该算目前使用用户最多的有损压缩数字音频格式了。它的全称是MPEG(MPEG:Moving Picture Experts Group) Audio Layer-3。早期的MP3编码采用的是固定编码率的方式(CBR ),我们常看到的128KBPS,就是代表它是以128KBPS固定数据速率编码可以提高这个编码率,最高可以到320KBPS,音质会更好,自然,文件的体积会相应增大。因为MP3的编码方式是开放的,你可以在这个标准框架的基础上自己选择
12、不同的声学原理进行压缩处理,所以,很快由Xing公司推出可变编码率的压缩方式(VBR)。它的原理就是利用将一首歌的复杂部分用高 bitrate 编码,简单部分用低 bitrate 编码,通过这种方式,进一步取得质量和体积的统一。MP3压缩编码使用了5种重要的技术:最小听觉门限判定(Minimal Audition Threshold)、掩蔽效应(Masking Effect)、位储存槽(Reservoir of Bytes)、联合立体声(JointStereo)和霍夫曼编码(Huffman Code)。最小听觉门限判定是一种减少信息量的手段,可以将大部分记录信息集中在人耳最敏感的25kHz范围
13、,其余频率则分配较少的容量记录。 掩蔽效应是一种心理声学模型,在听觉上表现为有一个音量或音色特别突出的声音出现时,其它细小的声音会变得难以被察觉,因而没有必要对所有的声音细节都进行编码,而只需对容易引起注意的声音编码。 位储存槽是MP3的流量属性,分为恒定比特率(CBR)和可变比特率(VBR)。CBR指文件每秒的信息流量固定不变,常见的MP3音频都是以CBR方式编码的,其优点是压缩速度快;缺点是由于每秒的信息流量相同,容易造成空间的浪费。VBR指文件每秒的信息流量可以变化,其优点是在信号复杂时用较多的容量记录,信号简单时用较少的容量记录以有效利用空间。通过位储存槽,将CBR编码的MP3音频,在
14、波形简单时用较少的容量记录,把多余的空间用于记录复杂的波形,维持流量的大小,以达到近似于VBR编码的效果。而用VBR编码的MP3音频则不需要位储存槽。 联合立体声是一种立体声编码技术,主要分为强度立体声(Intensity Stereo, IS)和中侧立体声(Mid/Side Stereo, M/S)两种。IS在流量比较低时使用,利用人类听觉系统对高频信号相位分辨能力不强的特点,将音频信号中的低频分离出来合成单声道信息,其余的高频信息合成另一个单声道信息,并通过另外记录高频信号的位置信息来重建立体声效果。M/S常被用于左右声道大体相似的情况,先将左右声道相加(L+R)得到一个声道,再将左右声道
15、相减(L-R)得到另一个声道,然后将这两个声道信息通过心理声学模型和滤波器处理。M/S与IS一样,是以损失部分相位信息为代价而获得较高音色记录信息的方法。一般地,在MP3音频编码中M/S和IS是交替使用的,视信息内容和流量而定。如果是更高流量如160kb/s以上的MP3 音频,则可以对立体声的两个声道独立编码,以保存相位信息。霍夫曼编码是一种常见的无失真压缩方案。在脉冲编码调制信号(PCM)被分成多个临界频带并经过以上处理后,经过混合多相修饰离散余弦变换(MDCT),将波形转换为一连串的系数,最终经过霍夫曼编码再次实现压缩。1.2苹果平台进展1.2.1 苹果平台历史介绍Mac OS是一套运行于
16、苹果Macintosh系列电脑上的操作系统。Mac OS是首个在商用领域成功的图形用户界面。Mac OS可以被分成操作系统的两个系列:一个是老旧且已不被支持的“Classic”Mac OS(系统搭载在1984年销售的首部Mac与其后代上,终极版本是Mac OS 9)。采用 Mach 作为内核,在Mac OS 8以前用“System x.xx”来称呼。新的Mac OS X结合BSD Unix、OpenStep和Mac OS 9的元素。它的最底层建基于Unix基础,其代码被称为 Darwin,实行的是部分开放源代码。 从1984年System 1.0 开始,到1987年的system 2.0,是苹
17、果早期的系统。System 1.0是苹果随同Macintosh 128K的最初电脑操作系统,发布于1984年1月,是第一个麦金塔操作系统。当时的System 1.0含有桌面、窗口 、图标、光标、菜单和卷动栏等项目。全体系统文件夹仅216K。System 2.0是在1985年的4月发布的,2.0只是1.0的一个更新而已,没什么太大的变化。后来苹果又分别在在1988年、1991年推出了System 6 、system7系统。1997年7月26日发布的Mac OS 8.0 带来 multi-thread Finder,三维的 Platinum 界面,以及新的电脑帮助系统。此时苹果才开始慢慢的开启了它
18、的另外一个时代。1999 年10月23 日苹果发布了Mac OS 9 是Mac OS 8.6的改进版本。Mac OS X 一代全新的产品,具有划时代的意义。诞生于2001年3月24日。Mac OS X 使用基于 BSD Unix 的内核,并带来Unix风格的内存管理和抢占式多任务处理 (pre-emptive multitasking)。大大改进内存管理,允许同时运行更多软件,而且实质上消除了一个程序崩溃导致其它程序崩溃的可能性。这也是首个包括“命令行”模式的 Mac OS,除非执行单独的终端工具程序,否则你可能永远也见不到。到今天,距离苹果2001年3月24日发布了第一代Mac OS X 1
19、0.0 Cheetah(猎豹)系统,到现在已经整整过去了十年的时间,从当初不完善的系统功能,到不断求新突破的今天,Mac OS X的版本变迁见证了苹果发展的十年历程。Mac OS X也在这十年之间陆续推出了8个版本。现在最新一代的Mac OS X 10.7 Lion 雄狮的系统也正在测试阶段,预计今夏将推出正式版本。这些平台的变迁都是针对苹果的iMac的。苹果这30年起起落落,曾经辉煌过,但是由于种种原因,它有段时间没落了,但是苹果一直在不断调整,一直在专心做自己的产品。当现在它又回到我们大家的视线中来的时候,它改变了世界IT行业的格局,苹果的三大产品分别深刻的改变了三类内容市场iPod之于音
20、乐市场、iPhone之于应用市场、iPad之于电子书市场。它开始为用户创造着需求,让我们明白原来可以用这个产品干这样的事情,原来产品可以这样用。它的耀眼光芒使它再次站在世界之巅。苹果的产品总能够让我们拥有最好的用户体验。1998年,苹果以iMac实现了公司复兴,2001年iPod诞生,改变了MP3播放器的时代。iMac 和iPod现在早已成为苹果公司的传奇产品。这两个产品真正实现了苹果巨人的复活,使得苹果时代又一次到来了。现在iPad会成为苹果公司的下一个传奇吗?就目前的状况看iPad正在通往传奇的路上越走越远。1.2.2 苹果系统与WINDOWS系统的区别Mac OS X与Windows在架
21、构与开发环境上最大的不同点在于:Mac OS X基于UNIX;Mac OS X主要开发工具X-code使用GCC作为编译程序,与其他种类的UNIX相同;不过Mac OS X也有独树一格的“bundle”软件包装格式这样的东西,成为它与其他操作系统不同之处。Windows和Mac OS X都属于现代的操作系统,所以Windows在操作系统层级所提供的功能执行文件与链接库加载、多任务与多线程、内存管理等在Mac OS X上都找得到对等的API和作法。不过,相较于Windows在微软独力开发下,架构和API都维持着相对的一贯性(另一方面,也背负着各种历史遗迹和向下相容的包袱),Mac OS X则是底
22、层源自NeXTSTEP的Mach微核心(现在称为XNU),而应用层(用准确的UNIX术语来说叫userland)来自FreeBSD 4。Mac OS X透过这样的架构,才拥有和一般Linux/FreeBSD相似的UNIX应用环境。有相当多Mac软件开发者喜欢在UNIX shell下工作,使用各种UNIX工具。而在Windows上,必须加装Cygwin之类的环境才能办到。Mac OS X受益自UNIX环境之处不少。尤其,Apple使用了大量的open source工具。举例来说,Apple不像微软,没有自己的C语言编译工具,Apple用的是UNIX业界的标准 open source的GCC(其中
23、当然有不少OS X的扩展功能就是)。虽然Apple有自己的开发环境Xcode,但是底层采用GCC这件事对开发者来说是相当重要的。同时,Apple的C/C+链接库用的也是GCC标准的std c/std c+。但是Mac OS X并不完全是UNIX。它的GUI环境(Aqua)就完全不是一般Linux/FreeBSD所使用的X11。而在UNIX层之下的微核心也和其他UNIX不同。接下来这一点很重要:Mac OS X虽然有和Windows .EXE和.DLL相对应的文件(Mac OS X跟其他UNIX一样,可执行文件一般不加扩展名,UNIX系的动态加载链接库则冠以.dylib),但更重要的架构差异是b
24、undle。Bundle概念承袭自NeXTSTEP。简单来说,就是由操作系统提供一种类似对象封装的文件包裹。Mac OS X上最常见的bundle要属.app结尾的应用程序了。虽然.app外观上是个文件,在UNIX shell下看就能发现它其实是个目录,内含各种metadata(通常至少会有一个名为Info.plist的数据文件)、可执行文件、动态链接模块、各种资源等。除了.app外,OS X的各种框架档(以.framework结尾,是一种同时包含头文件及链接库的包装)、应用程序的外挂模块(通常以.bundle结尾)等等,都是以bundle形式呈现的。如表1就是Mac OS X和windows
25、的一些主要差别。表1 Mac OS X和Windows比较项目WindowsMac操作系统最新版本Windows 7Mac OS X 10.6操作系统核心NT Kernel XNUCLI shell环境CMD.EXEUNIX shellGUI(shell环境)Windows ExplorerAqua(Finder)用来辨认软件组织的方式GUIDBundle identify厂商提供的开发环境Visual StudoX-code可视化的GUI制作工具Visual Sudio内建的WinForm designerInterface BuilderC编译工具Microsoft C CompilerG
26、CC操作系统服务WIN 32 API从POSIX layer用std c/c+取用续表1项目WindowsMac系统核心服务WIN 32 APICoreFoundation/CoreServices面向对象的API.NET Framework/MFCCocoa桌面应用程序的数据库方案ODBC/ADO.netAppKit和Cocoa Graphics基本绘图系统使用的单位Pixel(GDI)Point(Quartz)主要开发语言C/C+/C#Objective C/C+,C/C+系统内部编码Unicode (UTF-16)Unicode(文件系统使用UTF-8,系统API使用CFString/N
27、SString,内部使用UTF-16)应用程序的设定管理方式Windows registryProperty list files脚本语言支持VBScript/JScript/CScript/DOS Batch scriptAppleScript/perl/Ruby/shell script/Python数据结构与容器 System.collectionsNSArray/NSDictonary/etc1.3开发此项目的背景和意义近几年苹果公司再度崛起,强势回归。随着苹果风暴再次席卷全球,苹果旗下产品的火爆和热卖。于是在苹果平台之下的应用一下子变的多了起来。尤其在欧洲和北美,苹果的市场需求量之大
28、让人感到不可思议。苹果公司的网上应用商店App Store的软件产品更加是琳琅满目,上面有很多都是苹果发烧友开发的应用,为大家提供方便和更多的选择。本选题正是基于当今最火爆的平台,通过在苹果的Mac平台下一个mp3播放器的实现,熟悉在Mac平台下多媒体软件的开发。满足在苹果操作系统上日常的音乐播放需求。Mac OS X 目前最新的版本是10.6,它作为一款先进的操作系统是基于稳定的Unix内核而构建起来的。苹果的核心技术core technology包括了 Core Image、Core Video、Core Audio 和 Core Animation 都为不同类型的媒体提供先进的操作支持。
29、苹果用Open GL技术来渲染3D图像, OpenGL被Mac OS X 同时用作独立的图形加速的和系统图形加速实现,所以苹果公司产品的界面看起来总是如此的绚丽迷人。苹果公司的应用程序框架层(Application Frameworks)内嵌了用于构建应用程序的各种技术,它的核心是用于开发程序的基础环境:Cocoa、Carbon 和 Java 等。各种环境的设计是为了让熟悉某一种环境的开发人员能够有施展的平台。比如:Cocoa 和 Java 分别使用 Objective-C 和 Java 语言提供面向对象的开发环境,而Carbon 提供基于 C/C+语言的开发环境。这一层同样提供其他大量的辅助
30、框架技术,比如 Core Data(用于帮助开发人员快速管理数据模型与关系)、Address Book(与系统的地址簿程序进行沟通)等等。可以通过 X-code 来组织和编辑源代码、编译并调试程序、查看文档或构建不同类型的软件。除了 X-code,Mac OS X 也提供您一整套开源的解决方案,比如 GNU Compiler Collection(GCC)。命令行构建 工具也一应俱全,包括 makefile、gdb debugger、分析工具、性能调试工具、源代码管理工具和其他许多编程工具。1.4 本文研究的内容和结构本文研究的主要内容就是Mac平台下一个MP3播放器的实现。在苹果的iMac上
31、运行软件,实现一般mp3和wma格式的音乐文件的播放。系统包括本地音乐管理、播放控制、歌曲列表管理、歌曲信息管理和底层支持五大模块。本地音乐管理包括:浏览本地文件夹,添加本地音乐到播放列表;播放控制包括:音乐的播放、音乐的暂停,播放模式控制,上一首、下一首控制,歌曲音量调节;歌曲列表管理管理包括:显示选中的歌曲,显示正在播放的歌曲,歌曲列表的排序,歌曲队列的添加;歌曲信息管理只用来管理歌曲的详细信息,例如:艺术家、歌曲时长、专辑信息、码率、音轨等。底层支持模块就是实现mp3文件的编解码。论文结构如下:第1章,绪论,介绍开发此项目的背景、目的、意义。第2章,讨论本系统实现的关键技术。首先总体介绍
32、苹果的开发平台Objective - C和Cocoa框架,然后详细说明了系统实现的技术关键,最后说明了设计本系统需要的硬件和软件支持。第3章,系统需求分析以及开发遇到的技术难点问题。第4章,详细介绍每个功能模块的实现。第2章 关键技术2.1 Objective C 特点Objective-C,是C的衍生体,继承了所有 C 语言的特性,但是它们不是继承于 C 的语言特性本身。Objective-C的运行环境库(Runtime Library)完全是由C编写的,因此任何一个Objective-C消息派发(Message Dispatching),都会被替换成Objective-C运行环境中的某个或
33、某几个C函数的调用。这种机制为Objective-C带来了高效的消息派发和对C代码完全原生的兼容。Objective-C实际上是C的超集,Objective-C就是拥有一个面向对象层(Object Oriented Layer)的C。而Objective-C正是通过从Smalltalk进化而来的这种语法,实现了对这个面向对象层的支持。Objective-C和C+不同,它不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类名称加上前缀,以免引致冲突。在Cocoa编程环境中,所有Mac OS X系统类和函数均有“NS”作为前缀,例如NSObject或NSB
34、utton来清楚分别它们属于Mac OS X核心,使用“NS”是由于这些类别的名称在NEXTSTEP开发时定下的。和C+不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C+不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories(分类)和protocols(协议)不但可以提供很多多重继承的好处,而且避免了很多麻烦。和C+另外一个很明显的不同就是Objective-C在没有设定存取权限(protected, public, private)时,预设的存取权限为 protected。并且在自己的类之间尽量使用低耦合的联
35、合依赖关系,而少用高聚合的继承关系,增强模块之间的独立性。Objective-C和C+的对象模型和层次结构是截然不同相互独立的。Objective-C是一门动态性很强的语言。编译器保留了绝大部分信息,使得在运行阶段能使用这些信息进行动态绑定。下面是一个Objective-C程序的典型结构:Fraction.h#import interface Fraction: NSObject int numerator;int denominator;property int numerator;property int denominator;- (void) print;- (void) setNum
36、erator: (int) n;- (void) setDenominator: (int) d;- (int) numerator;- (int) denominator;endFracktion.m#import “Fraction.h”implementation Fractionsynthsize numerator;synthesize denominator;end2.2 Cocoa框架技术介绍Cocoa为创建应用程序提供了一个功能丰富的支撑层。它拥有一个保罗万象的面向对象的API集,与Mac OS提供的众多技术相辅相成。这些技术大多继承于NextStep操作系统。另外一些则源于M
37、ac OS X的内核BSD Unix系统。Cocoa框架包含基于控制台程序的Foundation框架和用于图形化界面开发的AppKit框架。Foundation 全称Foundation Framework,是Cocoa的一个子开发框架。Foundation里包含了Cocoa中最基本的一些类,它们在一个Mac应用程序中通常负责对象管理、内存管理、容器等相关数据结构的操作。Foundation.h是Foundation的头文件,一旦引入了这个头文件,我们就可以在自己的程序里使用任何在Foundation里声明的类。AppKit提供的类用于管理视图,窗口,文档,文本,图像,颜色等。利用AppKit
38、框架把界面和代码中的类、变量联系起来,可以大量减少书写的代码量。Cocoa是一套优雅的开发框架,无论是iMac桌面应用程序,还是面向iPhone、iPod、iTouch的移动应用程序开发,都依赖于Cocoa这一强大的快速开发框架。它是一个高度面向对象的(Object Oriented)开发框架。无论是资深的Mac开发人员,还是即将踏入Mac开发的新人,Cocoa都是日常必须的,它是构建Mac OS X应用程序最强大、最高效的工具。苹果公司之所以能够开发出众多顶级软件,其实也正是因为有着Cocoa这个秘密武器。Cocoa是Mac OS X上原生支持的应用程序开发框架,苹果公司强烈推荐所 有Mac
39、开发人员使用。Cocoa框架在Mac OS层次结构中所处的位置如图2-1: 图2-1 Mac OS层次模型图2.3 Cocoa常用的设计模式MVC模式是进行Cocoa开发时用的最多最广泛的设计模式,M是持有数据并定义数据的逻辑操作,V是为用户可视化的呈现对象,C是在模型和视图之间起到中间人的角色。MVC范例适用于很多应用程序,因为控制器在中间的协调角色使模型对象无需知道界面的状态和事件。视图对象同时也不必知道模型对象的编程接口。这样就将问题分隔开来,有助于在应用程序中封装各种对象,也有助于代码复用。控制器 模型视图cocoa里的MVC设计模式和一般的MVC设计模式又有点区别:在视图和模型之间少
40、了一个连接的关系,具体如图2-2: 图 2-2 MVC设计模式图2.4 系统实现关键点2.4.1 Notification每个运行的程序都有一个NSNotificatinCenter的成员变量,它的功能类似于公告栏。应用程序的其中一些类会发送消息到NSNotificatinCenter,而一些类会注册成为observer,关注特定的通知,NSNotificatinCenter会把消息转发给所有对某类型通知感兴趣的observer。通知是Cocoa里对象之间进行实践通信的一种方式,通知时一种消息广播,发给应用程序中所有对通知表达的事情感兴趣的对象。通告也能传递与事件相关的数据。通告是在对象执行完
41、成动作之后产生,而不是像delegate是在之前产生。收到通知的对象没有机会建议是否要执行动作,而且对象的通知可以有多个监听者。如果一个类对应用程序其他类发生的事件感兴趣,会向通告中心注册,注册使用的方法为:-(void)addObserver:(id)notificationObserverselector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender此方法是注册成为NSNotificatinCenter的Observer,一旦对象notificationSe
42、nder有消息名为notificationName的消息发出,则接收这个消息,并执行(SEL)notificationSelector方法。如果一个类要向NSNotificatinCenter发送一个通知,则需要实现:-(void)postNotificationName:(NSString*)notificationName object:(id)notificationSender此方法是对象notificationSender向NSNotificatinCenter发送名为notificationName的消息。2.4.2 Delegatedelegate是Cocoa中广泛使用的模式,它
43、意味着无需创建自定义子类就可以修改对象的行为。委托是一个助手,例如类A有一个委托对象B,类A里有很多委托方法,供B去重写,当我需要类B去帮我做某件事情时,只要类B重写已经在类A中存在的关于做这件事情的方法就可以,类A会在调用这个方法的时候自动去找类B的具体实现。对象发送请求给它的委托对象,允许其影响自己的行为。这样可以减少类之间的关联性,有利于程序模块之间的独立。委托对象只能有一个。2.4.3 KVC和KVOKVC是一种通过变量名来读取及设置变量的方法。KVO允许当值发生变化时候通知你。当指定的对象的属性被修改了,允许对象接受到通知的机制。每次指定的观察对象的属性发生变化的时候,KVO都会自动
44、的去通知相应的观察者。2.4.4 Categoriescategories是分类的意思。它就是一个接口,与JAVA中的接口概念一样。通过使用categories,可以往已存在的类里面添加新的方法,还可以重载类里面已经存在的方法,但是一般不建议这么做,因为一旦重载了已经存在的方法,那么原来的那个方法将会失效。和一般接口不同的是,不必事先分类中所有的方法。使用categories增加了程序的灵活性。2.5 MP3格式详细介绍MP3 文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3 的全称应为MPEG1 Layer-3 音频文件,MPEG(Moving Picture Expe
45、rts Group)特指活动影音压缩标准.MPEG音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和MP2 的压缩率分别为4:1 和6:1到8:1,而MP3的压缩率则高达10:1到12:1,也就是说,一分钟CD 音质的音乐,未经压缩需要10MB的存储空间,而经过MP3 压缩编码后只有1MB 左右。不过MP3 对音频信号采用的是有损压缩方式,为了
46、降低声音失真度,MP3 采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。MP3 文件大体分为三部分:TAG_V2(ID3V2),Frame和TAG_V1(ID3V1)。ID3V1 包含了作者、作曲、专辑等信息,长度为128BYTE。与ID3V1比较,ID3V2 包含了作者、作曲、专辑等信息,长度不固定,扩展了ID3V1 的信息量。Frame包括一系列的帧,个数由文件大小和帧长决定。每个FRAME 的长度可能不固定,也可能固定,由位率bitrate 决定,每个FRAME 又分为帧头和数据实体两部分,帧头记录了mp3 的位率,采样率,版本等信息,每个帧之间相互独立。MAIN_DATA 部分长度是否变化决定于FRAMEHEADER 的bitrate 是否变化,一首MP3 歌曲,它有三个版本:96Kbps(96 千比特位每秒)、128Kbps 和192Kbps。Kbps(比特位速率),表明了音乐每秒的数据量,Kbps 值越高,音质越好,文件也越大,MP3 标准规定,不变的bitrate 的