OPenAL 3D音效开发

介绍:
这几年,随着声卡能力的提升与处理声音API的丰富,3D音效在游戏中扮演着愈演愈烈角色。在游戏中制造一个模拟真实的音响效果与精美的游戏画面同等重要。环境音与音乐可以让玩家感受游戏的另一种境界。不很多种声音API可以达到这种效果,比如微软的irectSound与DirectSound3D, Aureal的A3D与Creative Labs EAX.近不久,Loki Entertainment与 Creative Labs开发出了OpenAL.他们所做的是为了开发一些对声音处理的标准,并且是跨平台的。本教程就是介绍OpenAL,并初步涉及添加3D音效到你工程

OpenAL是一个处理库,它包含了在游戏中播放声音与音乐的接口。它允许程序员加载任何声音,并可以控制某角色的位置,速度,方向与角度, 以便决定声音的传播。所有声音的位置都是相对于听者的,在游戏中就是角色的位置。角色越靠近声源,声音就越大。OpenAL可以用来录制音乐。也可以用流的方式在后台连续的播放音乐。OpenAL支持DirectSound3D与EAX.这些方法都包含在库中,不需要另外的编写代码就可以直接用。

OpenAL较DirectSound与EAX的最大优点就是跨平台性。DirectSound3D只为windows设计,EAX是DirectSound3D的扩展。因此,如果想开发跨平台的应用程序,OpenAl是你不二选择。本教程主要在windows上展示OpenAL的主要用法。这儿的代码片断只是demo程序中的一些,你可以下载完整的例子。在例子中用OpenGL做为渲染库, 你可以比较两者之间的相同点。


开始:

首先你要获取OpenAL的SDK。你可以在Creative Labs developer网站下载http://developer.creative.com. 安装好SDK后,你就可以开始用它的接口了。首先,你要在你游戏或应用程序开始的时候初始化OpenAL库。在我的应用程序中,我选择的是irectSound3D,你也可以选择EAX。初始化过程代码如下:

加载声音:
OpenAL初始化以后,你可以用声音填充Buffers。第一步是用alutLoadWAVFile接口加载声音。然后你得把填充了的Buffer与Source联系起来。然后就可以播放声音了。代码如下:

在第一步中加载的声音文件是"test.wav"。声音数据读入并存入alBuffer。接着创建了一个source与buffer,然后把alBuffer中的数据与填入buffer中,最后source与buffer关联,wave数据释放。

设置Source属性:
如果你安装了有声音的source,你将需要设置一些属性。你将需要alSource方法。这个方法有点类似OpenGL中的方法,它有几种不同的版本。比如:alSourcei,alSourcef, alSource3f, 等等。设置属性时什么样的属性将决定调用什么方法。设置属性的时候参数类型与方法是一一对应的,比如,如果需要一个浮点参数,此时需要alSourcef方法。第一个参数是你需要修改的source,第二个是要修改source的什么

属性。后面的参数就是具体的属性值。下面的方法是设置source的位置与速度。

这儿的alSource是我们要声音源,AL_POSITION与AL_VELOCITY代表我们想改变位置与速度。其余的是具体值。

听者:

模拟现实中的声音接收者。 有了它,我们就可以模拟出更真实的音响效果。下面代码展示如何用Listener。

播放声音:

有了声音源,有了听者,那现在我们就可以播放我们的声音了。代码如下:

清除工作:

在你程序退出的时候, 你需要清除你的sources与buffers,并关闭OpenAL.方法很简单,下面有示例:

这就是用OpenAL播放声音的基本方法。回忆一下步骤:首先初始化OpenAL,然后加载声音,接着设置source与listener的属性,最后就可能播放声音了。当然,OpenAL可以做的远远不只这些,这儿写的只是一些基本的知识。它很博大精深,大家慢慢研究吧。

你可能感兴趣的:(open)