iOS音乐播放器三稿.docx
《iOS音乐播放器三稿.docx》由会员分享,可在线阅读,更多相关《iOS音乐播放器三稿.docx(27页珍藏版)》请在冰豆网上搜索。
![iOS音乐播放器三稿.docx](https://file1.bdocx.com/fileroot1/2023-7/11/46f3ba79-13f3-4bdc-8744-2b80ad512fd3/46f3ba79-13f3-4bdc-8744-2b80ad512fd31.gif)
iOS音乐播放器三稿
JIUJIANGUNIVERSITY
毕业论文
题目iOS音乐播放器
英文题目iOSMusicPlayer
院系信息科学与技术学院
专业计算机科学与技术
姓名吴传东
班级学号A111146
指导教师潇
二O一五年五月
针对iOS系统上的一款音乐播放器程序进展设计与实现讨论。
该音乐播放器实现了上一首,下一首,音量调节,歌词同步,播放模式的切换,快进快退等根本功能,还实现了对网络歌曲的分类获取及在线实时播放。
目前苹果手机大热,在全世界炽热销售,年轻人以拥有一台属于自己的苹果手机为傲。
在这个大环境下学习苹果软件开发,是年轻人非常不错的选择。
所以开发一款音乐播放软件非常具有市场前景。
这款音乐软件中有我完成了系统设计,系统架构,UI界面设计,以及最后的软件测试等工作。
关键词iOS;object-C;音乐播放器
AgainstthethemusicplayerprograminthesystemofioscarriedouttheDesignandImplementationofdiscuss.thebasicfunctionsoftheswitchtoplaybackmode,fastforwardandrewind,butalsotoachievetheclassificationofthesongsonthenetworkaccessandon-linereal-timeplayback.
Theapplemobilephone,hotsellallovertheworld,youngpeopletohaveaproudoftheirowniphones.Inthisenvironmentlearningapplesoftwaredevelopment,isayoungmanisverygoodchoice.SoIdevelopedthiskindofmusicplayersoftware
HaveIdoneinthismusicsoftwaresystemdesign,systemarchitecture,UIinterfacedesign,andthefinalsoftwaretesting,etc.
KeywordstheiOS;object-C;musicplayer
1.1课题来源及研究背景
当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场开展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三大手机操作系统,Windowsphone,Android,以及iOS操作系统,其中iOS系统有很大的开展前景。
那么能否在手机上拥有自己编写的个性音乐播放器呢,本文的音乐播放器就是基于iOS手机平台的播放器。
现今社会生活紧,而欣赏音乐是其中最好的舒缓压力的方式之一。
随着人们的生活水平越来越高,人们对音乐的需求也越来越高,而传统的音乐播放器又限于手机存,在音乐的分类和管理上有着很大的局限性。
本设计的实现的是对音乐能够控制播放,暂停,停顿,上一曲,下一曲,音量调节,视觉外观,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。
添加了对网络音乐的支持,使得手机只需要联网就会瞬间拥有百万首歌曲,不必在局限于手机存。
丰富的歌曲分类功能,使得繁多网络歌曲的管理,更加的仅仅有条。
这样就打破的传统播放器存的限制,是人们能够享受到更加丰富的歌曲。
本工程是一款基于iOS手机平台的音乐播放器,使iOS手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。
使人们的生活更加多样化。
也使设计者更加熟练iOS的技术和其它在市场上的特点。
本系统紧跟当前移动手机开发趋势,使用Objective-c语言开发一个基于iOS平台的音乐播放娱乐系统,实现基于iOS平台的音乐播放娱乐系统的根本功能。
歌的切换以及列表显示,在听歌的同时能够娱乐
第一章为绪论,介绍了本文的选题背景和意义,总结国外音乐播放器研究现状,同时对论文研究容安排进展阐述。
第二章对系统中涉及的相关理论和关键技术进展了研究,对Objective-C开发语言、iphone手机系统和MacOS相关技术进展了介绍和分析。
第三章对系统进展研究,阐述了系统的功能和性能和UI界面的设计和实现。
第四章在前面三章根底上研发出iPhone的音乐播放软件,同时,对系统各模块设计和实现进展分析,其中对关键技术给出了详细实现过程。
最后是论文的总结。
开发iOS软件需要使用苹果官方发布的Xcode工具软件,Xcode软件目前已更新到第6版本,是一款相当强大的开发工具。
使用Xcode我们将按图2-1来实现播放器的功能。
图2-1播放器功能图
开发iOS软件使用OC语言,并使用苹果公司所开发集成的Xcode软件,开发音乐播放器需使用到以下方法。
SystemSoundServices
SystemSoundServices是最底层也是最简单的声音播放效劳,调用AudioServicesPlaySystemSound这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:
如:
声音长度要小于30秒、InlinearPCM或者IMA4(IMA/ADPCM)格式的打包成.caf,.aif,或者.wav的文件、不能控制播放的进度、调用方法后立即播放声音、没有循环播放和立体声控制,另外,它还可以调用系统的震动功能,方法也很简单。
具体的代码可以参考官方的例如 SysSound,但是官方的例如只有一些简单的用法,从文档中我们发现可以通过AudioServicesAddSystemSoundpletion方法为音频播放添加CallBack函数,有了CallBack函数我们可以解决不少问题,比方可以克制SystemSoundServices本身不支持循环播放的问题。
AVAudioPlayer类
AVAudioPlayer是AVFoundation.framework中定义的一个类,所以使用要先在工程中引入AVFoundation.framework。
我们可以把AVAudioPlayer看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:
AAC、AMR(AdaptiveMulti-Rate,aformatforspeech)、ALAC(AppleLossless)、iLBC(internetLowBitrateCodec,anotherformatforspeech)、IMA4(IMA/ADPCM)、linearPCM(unpressed)、μ-lawanda-law、MP3(MPEG-1audiolayer3 。
AudioQueueServices
如果以上两种音频播放的解决方案都无法满足你的需求,那么我想你肯定需要使用AudioQueueServices。
使用AudioQueueServices对音频进展播放,你可以完全实现对声音的控制。
例如,你可以在声音数据从文件读到存缓冲区后对声音进展一定处理再进展播放,从而实现对音频的快速/慢速播放的功能。
MPMusicPlayerController
有两种播放器可以选择,一种是applicationmusicplayer,另外一种是iPodmusicplayer。
第一种播放器是一种部播放器,当程序对出后停顿播放;而第二种播放器那么与iPod播放器的信息相关,退出之后不会停顿播放。
在播放之前需要设置队列。
MPMoviePlayerController
MPMoviePlayerController与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController可以直接通过远程URL初始化,而AVAudioPlayer那么不可以。
不过大体上用起来感觉差不多。
格式支持:
MOV、MP4、M4V、与3GP等格式,还支持多种音频格式
音乐播放器行业市场供应分析及市场供应预测包括现在音乐播放器行业市场供应量估计量和预测未来音乐播放器行业市场的供应能力。
音乐播放器行业市场需求分析及音乐播放器行业市场需求预测包括现在音乐播放器行业市场需求量估计和预测音乐播放器行业未来市场容量及产品竞争能力。
通常采用调查分析法、统计分析法和相关分析预测法。
音乐播放器行业市场需求层次和各类地区市场需求量分析即根据各市场特点、人口分布、经济收入、消费习惯、行政区划、畅销牌号、生产性消费等,确定不同地区、不同消费者及用户的需要量以及运输和销售费用。
音乐播放器行业市场竞争格局包括市场主要竞争主体分析,各竞争主体在市场上的地位,以及行业采取的主要竞争手段等;估计音乐播放器行业产品生命周期及可销售时间即预测市场需要的时间,使生产及分配等活动与市场需要量作最适当的配合。
通过市场分析可确定产品的未来需求量、品种及持续时间;产品销路及竞争能力;产品规格品种变化及更新;产品需求量的地区分布等。
音乐播放器行业市场分析报告可为客户正确制定营销策略或投资策略提供信息支持。
企业的营销策略决策或投资策略决策只有建立在扎实的市场分析的根底上,只有在对影响需求的外部因素和影响购、产、销的部因素充分了解和掌握以后,才能减少失误,提高决策的科学性和正确性,从而将经营风险降到最低限度。
Objective-C是非常实际的语言。
它是一个用C写成、很小的运行库,只会令应用程序的尺寸增加很小,和大局部OO系统使用极大的VM执行时间会取代了整个系统的运作相反。
Objective-C写成的程序通常不会比其原始码大很多。
而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的存来开启一个窗口的情况相反。
因此,Objective-C它完全兼容标准C语言〔C++对C语言的兼容仅在于大局部语法上,而在ABI〔ApplicationBinaryInterface〕上,还需要使用extern"C"这种显式声明来与C函数进展兼容〕,而在此根底上增加了面向对象编程语言的特性以及Smalltalk消息机制。
Xcode最新版本是Xcode6,整合了苹果在WWDC大会上发布的新语言Swift。
2.5本章小结
苹果iOS是由苹果公司开发的手持设备操作系统。
苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPodtouch、iPad以及AppleTV等苹果产品上。
使用苹果电脑开发苹果软件,在Xcode上使用OC语言开发音乐播放软件。
3需求分析
使用Objective-C编程技术需求可行性分析
Objective-C是C语言的面向对象扩展,可以将其称为“带有对象的C〞。
相对于其他面向对象语言,Objective-C更加容易学习。
动态绑定
函数和消息的最根本不同是:
函数和它的参数是在编译的时候已经确定下来,但是消息和接收对象知道程序已经在运行,消息在传递时才能确定下来。
确切的消息方法实现依赖于消息的接收者,不同的接收者可能有一样的方法名不同的方法实现.运行时消息例程查找接收者和消息方法,找到消息方法实现的机器码,呼叫这个方法,传递给它消息实例变量指针。
多态性
在Objective-c中消息的调用看上去和标准C中的函数调用相似,但因为方法属于一个对象,消息的行为与函数调用还是不同,在一些情况下,一些对象仅能对针对它涉及的方法起作用。
这意味着两个对象对同样的消息有着不同的响应,即多态性。
Objective-c中多态性和动态绑定配合使用,可以使代码提供应任意数量不同类型的对象使用,这些对象不需要再写代码的时候就已经定义好,它们可以是以后开发的对象,也可以是其他工程的对象。
面向对象
面向对象程序构建在多种对象之上,基于Cocoa框架的程序可能使用NSMatrix对象、NSWindow对象、NSDirectonary对象、NSFont对象以及许多其它对象。
在Objective-c过定义类来定义对象。
面向对象让开发者更容易开发应用程序软件,以及更加规化。
继承性
类的定义是累进的,任个新类都是在另一个类的根底上定义的,新类继承了它的方法和实例变量。
继承使所有的类构成一颗树形的构造,在Objective-c中使用类一般要继承于基类:
NSObject,因为NSObject提供了大量的有用特性。
比方,一些图形类,需要继承于Shape类,而Shape是Graphic类的子类,Graphic又继承于NSObject类,因此,还是间接继承于NSObject类。
类的继承关系图3-1所示:
图3-1Objective-C类继承图
1.使用工具方面:
开发环境为xcode6
2.操作系统方面:
使用mac10.8操作系统。
3.硬件可行性
一台已经安装有所有必备的软件及相应软件设备的计算机;存要求大于或等于2G。
.社会因素和市场因素可行性.如今社会开展迅速,每个人都不再满足于功能单一的音乐播放器,越多倾向于娱乐性能完备的音乐播放系统。
用户对在听音乐的同时还可以按照目前市场情形,越来越多的移动开发者涌进iOS开发领域。
iOS平台上应用软件,AppStore的支付模式更为成熟而且有监管,另外iOS的兼容性问题小,开发人员不用考虑太多的配置兼容问题,美观大方的外形,更是吸引了用户。
而且其良好的用户体验,都为iOS的开展奠定了良好的根底。
该音乐播放系统,可以在听歌的同时玩本地小游戏,给用户极好的娱乐效果。
软件界面是人与计算机之间的媒介。
用户通过软件界面来与计算机进展信息交换。
因此,软件界面的质量,直接关系到应用系统的性能能否充分发挥,能否使用户准确、高效、轻松、愉快地工作,所以软件的友好性、易用性对于软件系统至关重要。
目前国软件开发者在设计过程中很注重软件的开发技术及其具有的业务功能,而忽略了用户对软件界面的需求,影响软件的易用性、友好性;对界面设计的研究也集中在界面设计技术、设计手段上面。
软件开发人员在设计时以经历为参考依据,缺乏对实际用户需求的了解。
而软件的友好性、易用性同用户特征严密相联,同样的软件界面,不同用户可能有绝然相反的评价。
因此分析用户特征、了解用户需求和操作习惯,是开发软件界面的必有步骤,必须引起足够重视。
本文讨论了一种界面需求分析的方法,意在探讨研究如何完成针对系统所有用户的界面需求定义,从而开发为用户所承受的界面。
讨论该方法的目的在于帮助设计人员快速明确用户的界面需求,让用户充分参与到界面需求分析中,从而在最终界面需求说明中表达用户的思想,满足用户要求。
根据系统功能划分,本系统详细需求描述如下:
1.音乐播放功能需求
为了给用户最好的用户体验,本功能模块实现mp3音乐文件的播放,歌曲的切换,音乐的暂停,音乐的开场,歌曲图片的显示,音量的调整,随意拖动滚动条来播放音乐等。
2.音乐播放列表功能需求
该模块实现的是音乐信息的管理,包括播放哪一个音乐,本地音乐播放列表的显示,所有的音乐信息等等。
3.在线搜索音乐功能需求
该模块实现的是使用网络API来在线搜索音乐,还包括搜索结果的正确显示等等。
4.在线音乐下载功能需求
该模块实现的是将通过网络API搜索到的音乐下载到本地,并显示下载列表。
播放界面要布局合理,颜色舒适。
界面为了表达简洁,方便的特点,主要使用了tabbar分为3大类,分别对应着网络,本地及设置模块。
在各个播放列表中,都有一个按钮,用于返回正在播放的界面,这样,对于用户操作来说是十分方便的。
根本原理
OC在创立对象时,不会直接返回该对象,而是返回一个指向对象的指针,因此出来根本类型以外,我们在OC中根本上都在使用指针。
ClassA*a=[[ClassAalloc]init];
在[ClassAalloc]的时候,已经发送消息通知系统给ClassA的对象分配存空间,并且返回了指向未初始化的对象的一个指针。
未初始化的ClassA对象接手到init消息,init迒回指向已初始化后的ClassA对象的一个指针,然后将其赋值给变量a。
在创立并使用完一个对象的时候,用户需要手动地去释放该对象。
如果指针a和b同时指向堆中同一块存地址
ClassA*a=[[ClassAalloc]init];
ClassA*b=a;
[adealloc];
当执行到第三行的时候,指针b就成了无头指针。
返回是一个在C++中也是常见的错误,我们需要防止返类错误,因为无头指针是危险的。
存泄露:
就如上面列子所示,当生成ClassA对象时,指针a拥有对该对象的访问权。
如果失去了对一个对象的访问权,而又没有将retaincount减至0,就会造成存泄露。
也就是说,分配出去的存无法回收。
AutoreleasePool
为了方便程序员管理存,苹果在OC中引入了自动释放池(AutoreleasePool)。
在遵守一些规那么的情况下,可以自动释放对象。
但即使有返回这么一个工具,OC的存仍需要程序员时刻关注。
AutoreleasePool的原理:
autoreleasepool全名叫做NSAutoreleasePool,是OC中的一个类。
autoreleasepool并不是天生就有的,你需要手动的去创立它:
NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];
一般地,在新建一个iphone工程的时候,xcode会自动地为你创立一个autoreleasepool,返回pool就写在Main函数里面。
在NSAutoreleasePool中包含了一个可变数组,用来存储被声明为autorelease的对象。
当NSAutoreleasePool自身被销毁的时候,它会遍历返个数组,release数组中的每一个成员〔注意,返里另是release,并没有直接销毁对象〕。
假设成员的retaincount大于1,那么对象没有被销毁,造成存泄露。
手动管理存
使用alloc、new、copy创立一个对象,该对象的retaincount都等于1,需要用release来释放该对象。
谁创立,谁去释放。
在返3钟方法以外的方法创立的对象,都被系统默认的声明为autorelease。
ClassA*a=[[ClassAalloc]init];
ClassA*b=a;
[bretain];
[brelease];
b=nil;
把一个指针赋值给另外一个指针的时候,a指针所指向的对象的引用次数并没有增加,也就是说,对象的retaincount依然等亍1。
叧有在retain了之后,retaincount才会加1。
那么,如果返时候执行[arelease],另是a指针放弃了对对象的访问权,对象的retaincount减1,对象没有被销毁。
另有当b也执行了release方法之后,才会将对象销毁掉。
"需求分析",是指对要解决的事情进展详细的分析,弄清楚事情的要求,包括需要输入什么date,要得到什么结果,最后应输出什么。
可以说,在软件工程当中的“需求分析〞就是确定要计算机“做什么〞,要到达什么样的效果。
可以说需求分析是做系统之前必做的。
在音乐播放器中,需求分析指的是在建立一个新的或改变一个现存的描写新系统的目的、围、定义和功能时所要做的所有的工作。
需求分析是软件工程中的一个关键过程。
在这个过程中,系统分析员和软件工程师确定顾客的需要。
只有在确定了这些需要后,他们才能够分析和寻求新系统的解决方法。
需求分析阶段的任务是确定软件系统功能。
音乐播放器的UI即UserInterface(用户界面)的简称。
UI设计是指对音乐播放软件的人机交互、操作逻辑、界面美观的整体设计。
好的UI设计不仅是让播放器变得有个性有品位,还要让播放器的操作变得舒适简单、自由,充分表达软件的定位和特点。
音乐播放软件设计可分为两个局部:
编码设计与UI设计。
UI的本意是用户界面,是英文User和Interface的缩写。
从字面上看是用户与界面2个局部组成,但实际上还包括用户与界面之间的交互关系。
在飞速开展的电子产品中,界面美化设计工作一点点的被重视起来。
做界面设计的“工程师〞也随之被称之为““UI工程师〞。
其实软件界面设计就像工业产品中的工业造型设计一样,是产品的重要卖点。
一个好的电子产品拥有美观的界面会给人带来舒适的视觉享受,拉近人与商品的心理距离,是建立在科学性之上的漂亮的艺术设计。
检验一个音乐播放器界面的标准既不是某个工程开发组领导的意见也不是工程成员投票的结果,而是终端用户的感受
1.简洁性
界面的简易是要让用户方便使用、容易了解产品,且能减少用户发生
错误选择的可能性。
2.记忆消耗最小化
人脑不是电脑,在设计界面时必须要考虑人类大脑处理信息的限度。
人类的短期记忆有限且极不稳定,24小时存在约25%的遗忘率。
所以对用户来说,浏览信息要比记忆更容易。
3同一性
它是每一个优秀界面都具备的特点。
界面的构造必须清晰且一致,风格必须与产品容相一致。
4清楚
在视觉效果上便于理解和使用。
5用户的熟悉程度
用户可通过已掌握的知识来使用界面,但不应超出一般常识。
6从用户习惯考虑
想用户所想,做用户所做。
用户总是按照他们自己的方法理解和使用。
通过比拟两个不同世界(真实与虚拟)的事物,完成更好的设计。
如:
书籍比照竹简。
7.平安性
用户能自由的作出选择,且所有选择都是可逆的。
在用户作出危险的选择时有信息介入系统的提示。
8.灵巧性
简单来说就是要让用户方便的使用,但不同于上述。
即互动多重性,不局限于单一的工具(包括鼠标、键盘或手柄、界面)。
苹果一直没有强调的一点是,关于属性中的retain。
事实上,属性中带有retain的,在赋值的时候可能已经在合成的setter中retain了一次,因此,返里也需要release。
property实际上是getter和setter,synthesize是合成返2个方法。
为什么在声明了属性之后可以用“.〞来直接调用成员变量呢?
那是因为声明属性以后系统根据你给的属性合成了一个set方法和一个get方法。
使用“.〞属性并没有直接关联,如果你不嫌麻烦,在你的程序里面多写一个set和get方法,你也可以使用“.〞来调用变量。
property(),如果你里面什么都不写,那么系统会默认的把你的属性设置为:
property(atomic,assign)…..
关于nonatomic:
返个属性没有对应的atomic关键字,即使我上面是返么写,但atomic是在你没有声明返个特性的时候系统默认,你无法主动去声明返一特性。
如果你的程序另有一个主线程,戒者你确定你的程序不会在2个或者以上线程运作的时候访问同一个变量,那么你可以声明为nonatomic。
指定nonatomic特性,编译器合成访问器的时候不会去考虑线程平安问题。
如果你的多个线程在同一时间会访问到返个变量的话,可以将特性声明为atomic(通过省略关键字nonatom