在iOS 9音频应用开发中最为简单和经常使用的就是AVFoundation框架中的AVAudioPlayer类。虽然AVAudioPlayer类不能播放网络上的音频文件,可是它能够播放本地音频文件,以及缓冲区的文件。本章将讲解最为基础的音频播放——本地音频文件的播放。ios
实现音频的播放须要使用到AVAudioPlayer类。AVAudioPlayer是AVFoundation.framework框架里面最基本的一个音频播放器的类。使用此类能够实现单个音频的播放、暂停以及中止等功能。本节将使用AVAudioPlayer类实现一个音频文件的播放。缓存
AVAudioPlayer是iOS 2.2以后引入的AVFoundation.framework框架中的一个类,使用此类能够实现音频的播放。表2-1中总结了AVAudioPlayer类中使用到的方法。网络
表2-1 AVAudioPlayer类的方法框架
表2-2总结了了AVAudioPlayer类中使用到的属性。 字体
表2-2 AVAudioPlayer类的属性ui
注意:在Xcode 6.0以后,在建立的项目中,AVFoundation.framework框架默认是被添加到项目中的。若是AVFoundation.framework框架没有被添加到项目中,就须要开发者手动进行添加。手动添加框架的具体操做步骤以下:url
(1)选择导航窗口中的项目名称,打开目标窗口,如图2.1所示。spa
图2.1 目标窗口code
(2)选择目标窗口中的Build Phases选项,打开Build Phases面板,如图2.2所示。对象
图2.2 Build Phases面板
(3)将Link Binary With Libraries(0 items)打开,会看到一个加号按钮,如图2.3所示。
图2.3 Link Binary With Libraries(0 items)
(4)选择加号按钮后,会弹出一个Choose frameworks and libraries to add对话框,如图2.4所示。
(5)在对话框中找到AVFoundation.framework框架,单击Add按钮。此时,就会在Link Binary With Libraries中出现添加的框架,如图2.5所示。这代表此框架已经添加到了项目中。
图2.4 Choose frameworks and libraries to add对话框
图2.5 添加框架
在iOS9的游戏应用中(如例如超级玛丽)或者是酷狗音乐打开时,常常会有音频的播放。这些音频都是应用程序预置的,也就是素材文件。在实现播放本地音频文件以前,首先须要将预置的音频文件添加到建立的项目中。添加音频文件的具体操做步骤以下。
(1)在建立项目的导航窗口中右击,弹出快捷菜单。
(2)在弹出的快捷菜单中选择Add Files to "***"…命令。弹出选择文件对话框,如图2.6所示。
(3)选择音频文件后,单击Add按钮,此时被选择的音频文件就添加到了建立的项目中。
图2.6 添加音频文件
注意:添加音频文件到建立的项目中除了以上讲解的方式外,还有一种方式,具体的操做步骤以下。
(1)找到须要添加到项目中的音频文件,将其拖动到建立的项目中,弹出Choose options for adding these files:对话框架,如图2.7所示。
图2.7 添加音频文件
(2)单击Finish按钮后,音频文件就添加到了建立的项目中。
注意:在添加音频文件中提到的两种方式,除了能够添加音频文件外,还能够添加其余文件,如图像文件、字体文件等。
加载音频文件是为了对AVAudioPlayer类进行实例化,实例化时须要使用到init()方法,根据init()方法参数需求的不一样,能够分为4种形式,分别为init(contentsOfURL:)、init(data:)、init(contentsOfURL:fileTypeHint:)和init(data:fileTypeHint:)。如下就是对这四种形式的讲解。
1.init(contentsOfURL:)
init(contentsOfURL:)是使用本地音频文件的地址对AVAudioPlayer类进行实例化。其语法形式以下:
其中,参数url是NSURL对象。NSURL是一个数据类型,实际上就是一个地址,不少开发人员会有疑惑,地址就是一个字符串,为何还有NSURL类型,那是由于地址分为绝地路径(描述目标文件夹的位置)和相对路径(显示文件的完整路径)。对于绝对路径来讲,地址的字符串都会比较复杂,包括不少请求参数。这样,在请求过程当中须要解析出来每一个部分,因此封装一个NSURL。因此须要将字符串转换为NSURL,对于NSURL的转换其实能够使用它的实例化方法init来实现,这个方法中会有一个字符串参数,也就是使用字符串去实例化NSURL方法,其语法形式以下:
其中,参数path是一个字符串。此字符串是一个地址(通常来讲不一样部分之间以斜线(/)分隔),这个地址能够是相对路径,也能够是绝对路径。
注意:参数path是只能够是本地文件的地址,不能够是网络地址。
2.init(data:)
在前面的内容中提到AVAudioPlayer类不能够播放从网络上获取音频文件,可是能够播放从网络上下载到内存缓冲区的音频。要实现内存缓冲区音频的播放,须要使用init()方法的init(data:)方式,其语法形式以下:
其中,参数data是一个NSData对象,表示一个音频数据。因为是要播放内存缓冲区的音频,因此NSData对象在建立时须要指定音频文件的地址,此时须要使用到init()方法的init(contentsOfFile:)形式。
其中,参数path是一个字符串,代码表示文件的绝对路径。
注意:参数data必须是一个完整的文件。
3.init(contentsOfURL:fileTypeHint:)
方法init(contentsOfURL:)和init(data:)都是在具备后缀名的状况下使用的形式,可是在网络上下载的音频文件可能因为某些缘由没有后缀名。这时就须要使用到init()方法的init(contentsOfURL:fileTypeHint:)形式以及init(data:fileTypeHint:)。init(contentsOfURL:fileTypeHint:)的语法形式以下:
其中,参数url是NSURL对象,此对象的实例化在前面讲解过。参数utiString用来指定文件类型的提示,用于提示系统该文件属于什么类型。其中,文件类型的提示如表2-3所示。
表2-3 文件类型的提示
4.init(data:fileTypeHint:)
init(data:fileTypeHint:)形式的语法形式以下:
其中,参数url是NSURL对象,此对象的实例化在前面讲解过。参数utiString用来指定文件类型的提示,这些提示能够参考表2-3。
对于音频文件来讲,读取的次数会过于频繁,这样不只可能致使存储卡损耗,还会增长CPU的负担。为了解决这一问题,咱们能够将加载的音频文件存入到缓冲区中(缓冲区为暂时放置输出或输入数据的地方)。而这一过程须要使用到AVAudioPlayer的prepareToPlay()方法,其语法形式以下
其中,该方法的返回值类型为Bool,即布尔类型。当值为真时,表示将文件放入缓存;反之,则不放入缓存。
最后一步就是播放音频,此功能的实现须要使用到AVAudioPlayer的play()方法,其语法形式以下:
其中,该方法的返回值类型为Bool即布尔类型。当值为真时,表示音频文件播放成功;反之,则失败。
本文选自:iOS 9音频应用开发基础教程大学霸内部资料,转载请注明出处,尊重技术尊重IT人!