本教程系列的最后一讲将介绍怎样为你的游戏加上声音。由于这是针对初学者的教程,所以我不会讨论复杂的音频技术,如OpenGL和Audio Queue。今天的主题是播放一段短的声音(少于30秒)。如果你不要求任何背景音乐,这将是最容易的播放音频的方式了。这种方式的缺点是一次只能播放一个音频文件。好,我们开始吧……先从上次教程的代码开始。我们今天将使用两种声音,一个是击打球的声音,另一个是得分的声音。

 

下面是你需要下载的音频文件:

 

注意文件的格式是.caf。你所有音频文件格式必须符合在iPhone上播放的要求。Apple提供了一个工具将音频转换成这种格式。这里是参考。很简单,打开终端输入:

 

/usr/bin/afconvert -f caff -d LEI16 {INPUT} {OUTPUT}

 

{INPUT}是输入音频文件路径,{OUTPUT} 是你想要存放的.caf文件路径。

 

将音频文件添加到项目中

 

将下载好的音频文件拖放到项目下的Resources文件夹。如果你还希望 安排得更为有序些的话,你还可以建立一个Audio子文件夹。请确定在“copy the files into your project’s directory”检查框上打勾。

screenshot_01

 

添加AudioToolbox.framework到项目

 

由于我们要用到此框架的一些函数,所以我们必须将此框架加入项目中。右击项目中的Frameworks文件夹选择Add -> Existing Frameworks。在搜索框内输入AudioToolbox.framework 然后选择搜索结果中的框架。(请确定点取了Computer 以搜索整个电脑)。

screenshot_02

 

找到所需框架后,按Add。现在我们已经准备好写代码了……

 

头文件声明

 

打开 iTennisViewController.h 加入下列代码:

screenshot_11

 

首先我们看到代码引入AudioServices.h,我们需要使用其中一些函数来播放音频。接下来定义了两个SystemSoundID。它们都是Integers(整数型,也可以使用int,但会引起许多警告信息)。然后打开iTennishViewController.m加入下面代码:

screenshot_09

 

现在我们来初始化声音对象。找到viewDidLoad方法加入下列代码:

screenshot_12

 

很简单吧。第一行是获取音频文件路径。下一行是将路径转换为CFURLRef。最后,加载音频文件并与指定soundID联系起来。注意我们传递的&clappingFileID参数,  这是通过参考地址传递的,因此它允许AudioServicesCreateSystemSoundID方法对其进行修改。我们用同样方法处理击球声。下面,我们可以开始播放了。

 

声音播放

 

播放加载好的声音实际上很简单。只需将需要播放文件的soundID传递给AudioServicesPlaySystemSound方法即可。所以播放得分时的鼓掌声只需在reset方法中加入下列代码:

screenshot_14

 

请注意,我们传递的clappingFileID说明我们是要播放鼓掌声。加在gameLoop中加入下列代码将播放球拍击球的声音:

screenshot_15

 

很容易吧?按“Build and Go”试玩我们的游戏吧。源代码下载

 

原文见:iPhone Game Programming Tutorial Part 4 – Basic Game Audio