来自当知百科
跳转到: 导航搜索

目录

EAX的本质

  EAX的本质是一种API(ApplicationProgrammingInterface),也就是一种编程接口,而且这个接口目前必须依赖于Microsoft的DirectSound3D。我们无论在什么时候讨论EAX时,都必须记住这一点。很多人往往把EAX和SoundBlasterLive!系列上被总称为EnvironmentalAudio(环境音效)的各种效果混为一谈,这是不对的。

  EAX1.0是一个开放的API,也就是说,任何人都可以使用这一接口来开发或者在自己的软硬件产品中加入对EAX的支持,但开放的仅仅是接口本身,至于如何实现EAX以及效果如何,就要靠自己的努力了。由于Creative的竞争者都宣布支持EAX,所以接下来的EAX2.0、3.0是否也开放或者只能用于Creative自身的产品,目前还不大清楚,有不少意见认为应该保留,也有意见认为应该继续开放。

  大家都记得Creative收购了Ensoniq,一间著名的音频技术公司,EAX实际上是由Ensoniq帮助开发出来的(记住EAX只是一个API,也就是说,这个接口是Ensoniq开发的,而别的有关东西就不一定了)。

EAX的作用

  既然EAX只是一种API,那么它究竟有什么用呢?从它的名称就可以看出来,EAX实际上是为了帮助软件开发人员方便的利用EnvironmentalAudio而设的,不过将来还可能包括EnvironmentalAudio以外的东西。由于EAX目前必须依赖于DirectSound3D,所以基本上是用于游戏之中。EAX1.0的作用说起来比较简单:为游戏加入3D混响(reverb)效果。注意仅仅是混响效果,而不是别的什么东西!所以如果有人大谈EAX1.0的定位效果如何如何好或不好,那只能说明他对EAX的作用并不了解。在支持EAX的3D游戏中,音效的3D定位实际上是由DirectSound3D来完成的。当然因为EAX和DirectSound3D密不可分,所以也容易造成误解。

EAX1.0的作用

  因为EAX1.0的作用只是为游戏加入3D混响(reverb)效果,而且用起来很简单(下面我们将会讨论这一点),所以有人攻击EAX只是简单的几条函数而已。其实EAX1.0本身的确是很简单的(对API而言,简单易用是一种优点),但实时reverb的实现就一点都不简单,有诸如各种反射、空间材质、空间大小等等一大堆东西要考虑,除了要求声卡处理能力强外,还要求有好的算法。虽然之前许多声卡可以设置reverb,但往往只能在MIDI上简单实现,而且没有几个能真正应用于实时变化的游戏当中。环境音效提出了“环境”的概念,而EAX在1.0中实现了混响这一最重要的因素的编程接口,可以说是游戏中3D定位概念之后的一个巨大进步。

  虽然众多的厂商都宣布支持EAX这一API,但就像同样支持Direct3D但不同的图形加速卡画面素质和速度各不相同一样,各种声卡在实现EAX的效果和速度上也必然会各不相同。EAX以SoundBlasterLive!系列为基准来开发,因此从理论上来说,SoundBlasterLive!能获得最好的效果,当然这并不绝对,因为毕竟听觉是比较主观的东西。

  EAX1.0只帮助实现了EnvironmentalAudio中的混响效果,对于EnvironmentalAudio的各种效果来说当然是不足够的,而且在互动游戏中应用的话,还必须有更多的特点。因此EAX也在不断的发展,EAX2.0正在开发当中,也许很快就可以和我们见面。

EAX2.0的作用

  EAX2.0究竟会有什么改进,目前其实并不十分明朗,几乎可以确定的改进包括加入了occlusion和obstruction属性,以及一些更加方便易用的特性。当然在EAX2.0正式发布之后,我们就可以知道它的真貌了。Occlusion属性的作用在于模拟类似于声源位置在另一个房间或墙的另一边之类的情况;而obstruction属性的作用在于模拟声音在同一个场景中遇到障碍物时衍射的情况,例如一个人在同一个房间中的一个大柱子后面讲话。

  就在我们盼望着EAX2.0的时候,3月16号,Creative又宣布了EAX3.0,据介绍EAX3.0加入了功能强大、简单易用的音效设计工具。包括可以为每一个单独音源做早反射和混响的控制、局限反射群、改进了的距离模型、允许在环境之间动态平滑切换等等,并为开发者公开了全部环境音效参数。通过EAX3.0,营造一个真实生动的音效将更加容易。

  环境音效本身也在不断的变化、改进之中,EAX作为它的API,功能当然也会越来越强,作用越来越大。

EAX的实现

  EAX主要是依附于DirectSound3D的扩展API,因此与DirectSound3D密不可分,也就是说,要支持EAX就必须支持DirectSound3D,否则无法利用EAX的函数和属性。反过来,支持DirectSound3D不一定支持EAX。

  由于是DirectSound3D的扩展,EAX的调用方式基本上和DirectX相一致,对于用惯了DirectX编程的人来说,简直就是小菜一碟。一个典型应用的实现只需要不多的代码,一般来说,首先必须启动DirectSound,然后就是创建音效缓存,包括主缓存和次级缓存:主缓存是DirectSound必有的,主要用来表现听者(thelistener)在3D听觉环境中的情况,如位置、速度、听者方向(向上、下、左、右看等)等等;次级缓存则可以有很多,主要用来表现音源(每一个次级缓存对应一个音源)的情况,如速度、音锥(soundcones)、与听者的最大/最小距离等等。音效缓存创建后,还要为每一个缓存创建三个界面:标准界面控制基本的缓存行为(回放音量、频率等),3D界面控制3D行为(位置、速度等),特性设置界面则为缓存设置EAX特性。都完成之后,我们就可以设置环境效果并修改调节各种有关参数了。除了可以精确控制环境参数外,EAX还预设了许多现成的环境如ROOM、CAVE、CONCERHALL等,我们可以通过

  EAX_REVERBPROPERTIESpreset=(EAX_PRESET_ROOM);

  pReverb->Set(DSPROPSETID_EAX_ReverbProperties,DSPROPERTY_EAX_ALL,NULL,0,&preset,sizeof(EAX_REVERBPROPERTIES));

  之类的语句来设置。对于一些不想花脑筋去详细研究声学的开发者来说是很方便的。

  正因为使用方便简单,所以很多开发商也比较乐意采用EAX,反正花的功夫并不多,又能在游戏的特性列表和卖点上大加一条,何乐而不为呢?

EAX的发展

  EAX发布以来,已有多家硬件和软件厂商表示支持,如YAMAHA、ESS、Aztech、QSOUND等,EAX2.0还被集成在IA-SIG(InteractiveAudioSpecialInterestGroup?桓鲋铝τ诮换ヒ粜П曜嫉淖橹?┑?/FONT>I3DL2(IA-SIGInteractive3DAudioRenderingGuidelineLevel2)内。EAX本身除了大家看到的1.0、2.0、3.0外,将来也许会有更新的版本,更多的特性(如环境音效的各种效果、变化等),并扩展到DirectMusic、MIDI等范围。

个人工具
名字空间

变换
查看
操作
导航
工具箱