3.1 任务需求分析
在本小节主要利用openal实现对音频文件的播放。在功能上需要实现可以利用ply_music
按钮播放本地音频文件。界面上我们沿用2.1小节中所建立的工程,在-(IBAction) ply_music:
(id)sender中注释掉利用AudioToolbox.framework框架以及利用AVFoundation.framework播放音频文件的方法,将相应的open al代码添加进去。除此之外还需要实现可以播放本地pcm音频文件,以及了解3D音频特效的实现方法。
本小节的主要目的在于:
(1)了解open al的跨平台音频处理库。
(2)掌握ios环境下利用open al播放音频文件的方法。
(3)掌握利用open al直接播发本地pcm音频类型文件的原理和方法。
(4)了解open al在3D音效技术处理上的应用。
3.2 OPEN AL概述
在正式开始学习这一章节之前我们首先要了解什么是open al技术?以及open al技术的要点?Open al主要针对三个对象:分别是声源(source)、缓冲器(buffer)、listener(听众)。OPEN AL是一款跨平台的音效处理库。它的最大特点是根据source(声音源)以及listener(听者)之间的相对位置(三维笛卡儿坐标系下)来实现3D的音频特效。OPEN AL在风格上与OPEN GL非常类似。具有OPEN GL基础的同志们可以很快速的掌握这个音效处理库的使用。
OPENAL支持多种音效平台,如Mac OS X、iOS、GNU/Linux、Windows PC等等。因此很方便的应用在苹果设备中。
图1是OPEN AL的结构框架:
从层次上来分,OPENAL主要包括音频播放部分以及数据缓冲部分。要想可以正常的播放音频信号,open al中需要包括一个device(音频设备)、最少一个Context、一个或者多个声源source,还要有一个或者多个缓冲buffer。对于每个context来说只能对应一个listener。其中
Device表示用于播放音频的具体音频设备。Context表示用于播放音频的上下文环境。Source代表用于存放原始音频信号的数据源。Buffer用于在播放过程中充当source数据缓存。
下面通过最简单的步骤构造一个基于open al的音频播放器,帮组大家快速的掌握利用open al播放音频文件的方法。具体来说构件播放器的步骤分为open al初始化部分以及Open al音频播放部分。
open al初始化部分:
1、打开音频设备(device),并获取设备的id号。
2、创建该音频设备的播放环境,并对其进行匹配。
3、创建音频数据缓存空间(buffer),并获取数据缓存空间的id号。
4、创建声源数据原始空间(source),并获取声源空间id号。
Open al音频播放部分:
1、打开所需要播放的音频文件,并获取音频文件的音频格式(如音频编解码方式、量化位数等)
、音频文件大小、采样频率。
2、根据音频文件的相应参数将刚刚打开的音频文件数据源装载到buffer缓存中。
3、设置音源(source)以及听众(linstner)的具体位置。二者之间的相对位置不同,听到的声音效果也不同,例如有时你会听到声音在你的后面,有时你会听到声音在你的前面。
4、将声源(source)与缓存(buffer)关联起来。
5、利用open al api播放音频文件。
在了解了open al初始化和音频播放流程之后,我们已经对open al的使用过程有了一个清晰的认识,但在在开始分析源代码之前还需要了解以下open al常用到的一些数据结构。
ALuint source;