天天看点

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

iOS 9音频应用播放音频之ios9音频基本功能

在iOS 9音频应用开发中最为简单和常用的就是AVFoundation框架中的AVAudioPlayer类。虽然AVAudioPlayer类不能播放网络上的音频文件,但是它可以播放本地音频文件,以及缓冲区的文件。本章将讲解最为基础的音频播放——本地音频文件的播放。

iOS 9音频应用开发基本功能

实现音频的播放需要使用到AVAudioPlayer类。AVAudioPlayer是AVFoundation.framework框架里面最基本的一个音频播放器的类。使用此类可以实现单个音频的播放、暂停以及停止等功能。本节将使用AVAudioPlayer类实现一个音频文件的播放。

iOS 9中的AVAudioPlayer类简介

AVAudioPlayer是iOS 2.2之后引入的AVFoundation.framework框架中的一个类,使用此类可以实现音频的播放。表2-1中总结了AVAudioPlayer类中使用到的方法。

表2-1  AVAudioPlayer类的方法

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

表2-2总结了了AVAudioPlayer类中使用到的属性。 

表2-2  AVAudioPlayer类的属性

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

注意:在Xcode 6.0之后,在创建的项目中,AVFoundation.framework框架默认是被添加到项目中的。如果AVFoundation.framework框架没有被添加到项目中,就需要开发者手动进行添加。手动添加框架的具体操作步骤如下:

(1)选择导航窗口中的项目名称,打开目标窗口,如图2.1所示。

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

图2.1  目标窗口

(2)选择目标窗口中的Build Phases选项,打开Build Phases面板,如图2.2所示。

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

图2.2  Build Phases面板

(3)将Link Binary With Libraries(0 items)打开,会看到一个加号按钮,如图2.3所示。

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

图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所示。这表明此框架已经添加到了项目中。

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

图2.4  Choose frameworks and libraries to add对话框

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

图2.5  添加框架

ios9音频应用开发准备素材文件

在iOS9的游戏应用中(如例如超级玛丽)或者是酷狗音乐打开时,经常会有音频的播放。这些音频都是应用程序预置的,也就是素材文件。在实现播放本地音频文件之前,首先需要将预置的音频文件添加到创建的项目中。添加音频文件的具体操作步骤如下。

(1)在创建项目的导航窗口中右击,弹出快捷菜单。

(2)在弹出的快捷菜单中选择Add Files to "***"…命令。弹出选择文件对话框,如图2.6所示。

(3)选择音频文件后,单击Add按钮,此时被选择的音频文件就添加到了创建的项目中。

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

图2.6  添加音频文件

注意:添加音频文件到创建的项目中除了以上讲解的方式外,还有一种方式,具体的操作步骤如下。

(1)找到需要添加到项目中的音频文件,将其拖动到创建的项目中,弹出Choose options for adding these files:对话框架,如图2.7所示。

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

图2.7  添加音频文件

(2)单击Finish按钮后,音频文件就添加到了创建的项目中。

注意:在添加音频文件中提到的两种方式,除了可以添加音频文件外,还可以添加其他文件,如图像文件、字体文件等。

ios9音频应用开发加载音频文件

加载音频文件是为了对AVAudioPlayer类进行实例化,实例化时需要使用到init()方法,根据init()方法参数需求的不同,可以分为4种形式,分别为init(contentsOfURL:)、init(data:)、init(contentsOfURL:fileTypeHint:)和init(data:fileTypeHint:)。以下就是对这四种形式的讲解。

1.init(contentsOfURL:)

init(contentsOfURL:)是使用本地音频文件的地址对AVAudioPlayer类进行实例化。其语法形式如下:

  • init(contentsOfURL url: NSURL) throws

其中,参数url是NSURL对象。NSURL是一个数据类型,实际上就是一个地址,很多开发人员会有疑惑,地址就是一个字符串,为什么还有NSURL类型,那是因为地址分为绝地路径(描述目标文件夹的位置)和相对路径(显示文件的完整路径)。对于绝对路径来说,地址的字符串都会比较复杂,包括很多请求参数。这样,在请求过程中需要解析出来每个部分,所以封装一个NSURL。所以需要将字符串转换为NSURL,对于NSURL的转换其实可以使用它的实例化方法init来实现,这个方法中会有一个字符串参数,也就是使用字符串去实例化NSURL方法,其语法形式如下:

  • init(fileURLWithPath path: String)

其中,参数path是一个字符串。此字符串是一个地址(一般来说不同部分之间以斜线(/)分隔),这个地址可以是相对路径,也可以是绝对路径。

注意:参数path是只可以是本地文件的地址,不可以是网络地址。

2.init(data:)

在前面的内容中提到AVAudioPlayer类不可以播放从网络上获取音频文件,但是可以播放从网络上下载到内存缓冲区的音频。要实现内存缓冲区音频的播放,需要使用init()方法的init(data:)方式,其语法形式如下:

  • init(data data: NSData) throws

其中,参数data是一个NSData对象,表示一个音频数据。由于是要播放内存缓冲区的音频,所以NSData对象在创建时需要指定音频文件的地址,此时需要使用到init()方法的init(contentsOfFile:)形式。

  • init?(contentsOfFile path: String)

其中,参数path是一个字符串,代码表示文件的绝对路径。

注意:参数data必须是一个完整的文件。

3.init(contentsOfURL:fileTypeHint:)

方法init(contentsOfURL:)和init(data:)都是在具有后缀名的情况下使用的形式,但是在网络上下载的音频文件可能由于某些原因没有后缀名。这时就需要使用到init()方法的init(contentsOfURL:fileTypeHint:)形式以及init(data:fileTypeHint:)。init(contentsOfURL:fileTypeHint:)的语法形式如下:

  • init(contentsOfURL url: NSURL,
  •       fileTypeHint utiString: String?) throws

其中,参数url是NSURL对象,此对象的实例化在前面讲解过。参数utiString用来指定文件类型的提示,用于提示系统该文件属于什么类型。其中,文件类型的提示如表2-3所示。

表2-3  文件类型的提示

iOS 9音频应用播放音频之ios9音频基本功能iOS 9音频应用播放音频之ios9音频基本功能

4.init(data:fileTypeHint:)

init(data:fileTypeHint:)形式的语法形式如下:

  • init(data data: NSData,
  • fileTypeHint utiString: String?) throws

其中,参数url是NSURL对象,此对象的实例化在前面讲解过。参数utiString用来指定文件类型的提示,这些提示可以参考表2-3。

ios9音频应用开发添加音频文件到缓冲区

对于音频文件来说,读取的次数会过于频繁,这样不仅可能导致存储卡损耗,还会增加CPU的负担。为了解决这一问题,我们可以将加载的音频文件存入到缓冲区中(缓冲区为暂时放置输出或输入数据的地方)。而这一过程需要使用到AVAudioPlayer的prepareToPlay()方法,其语法形式如下

  • func prepareToPlay() -> Bool

其中,该方法的返回值类型为Bool,即布尔类型。当值为真时,表示将文件放入缓存;反之,则不放入缓存。

ios9音频应用开发播放音频

最后一步就是播放音频,此功能的实现需要使用到AVAudioPlayer的play()方法,其语法形式如下:

  • func play() -> Bool

其中,该方法的返回值类型为Bool即布尔类型。当值为真时,表示音频文件播放成功;反之,则失败。

本文选自:iOS 9音频应用开发基础教程大学霸内部资料,转载请注明出处,尊重技术尊重IT人!