利用Directsound3D实现游戏中3D音效
2008-04-09 04:10:10来源:互联网 阅读 ()
摘要:3D游戏中,增强的3D音效会让游戏玩家产生震撼的听觉效果,本文通过一个示例演示了如何采用微软的Directsound 3D 实现3D环绕立体声。
关键词:Directsound 3D 游戏 3D立体声
在开始本文前,我要说一句,Directsound 3D可以说是Directsound的精华所在,我个人的感觉,在3D游戏的开发中,3D音效一般都是采用Directsound 3D来完成的。
DirectSound 3D是微软公司所推出的,它利用声音大小的比例调整与都卜勒效应,来达到以软件来模拟3D音效的效果,创立了在三维空间定位音效文件的标准方式。任何应用程序透过它和支持DirectSound 3D的声卡,便可以获得所需的效果。由于这是许多声卡厂商与微软共同制定的,现在大部分的声卡都支持这项技术。 本文就是将Directsound 3D技术介绍给大家,你们可以在你们的程序中使用它,相信会给你的程序增色不少。
下面我们就开始吧,在开始前,我还要先介绍一下Directsound 3D相关的几个基本概念。然后通过一个例子来演示如何使用Directsound 3D,源码附在后面,可以下载。
3D空间 声源 听者
Directsound 3D是通过软件模拟来实现3D音效的,所以要先讲一下Dsound 的3D模拟空间。这个空间类似现实空间,可以用笛卡儿坐标系来描述Dsound 的3D空间,有x,y,z三个坐标轴坐标轴。
在这个模拟空间中Dsound提供了模拟的声源对象和倾听者对象(listener),声源和听者的关系可以通过三个变量来描述:在三维空间的位置,以及运动的速度,以及运动方向。
位置即声源和听者在三维空间的所在位置,随着两者的相对位置不同,则听者便会听到不同的声音效果。
速度为声源和听者在三维空间中的移动速度,此项特性同样会改变两者在空间的坐标,以产生不同的声音效果。
声源和听者相对运动的方向也会影响听者听到的声音效果,因为声音是具有方向性的。这个下面会谈到。
知道了3D声源以及3D环境中的听者,那么怎么产生3D音效呢?一般来说,在产生3D音效的时候,主要有下面的几种情况,1 是声源不动,而听者在模拟的3D空间进行运动,2 是听者不动,让声源在模拟的3D空间进行运动,3 听者和声音同时在运动。如下图:
图1 声源不动,听者移动产生3D音效
图2 听者不动,声源移动产生3D音效
Directsound给我们提供了听者和声源对象的接口,我们可以通过上面提到的三种方式设置改变声源或者听者的位置,运动速度和方向就可以形成3D音效了,
在3D环境中,我们通过IDirectSound3DBuffer8接口来表述声源,这个接口只有创建时设置DSBCAPS_CTRL3D标志的Directsound buffer才支持这个接口,这个接口提供的一些函数用来设置和获取声源的一些属性。在一个虚拟的3D环境中,我们可以通过主缓冲区来获取IDirectSound3DListener8接口,通过这个接口我们可以控制着声学环境中的多数参数,比如多普勒变换的数量,音量衰减的比率。
接口很简单,但是大量的计算工作Directsound都在内部帮助我们完成了。
当听者越接近声源,那么听到的声音就越大,距离减少一半,音量会增加一倍。但是,当你继续接近到声源,当距离缩短到一定距离后,音量就不会持续增加。这就是声源的最小距离。
声源的最小距离,就是声音的音量开始随着距离大幅度衰减的起始点。例如,对于飞机,这个最小距离也许是100m,但是对于蜜蜂,这个最小距离是2 cm,根据这个最小距离,当听者距离飞机400m时,声音的音量就要衰减一半,对于蜜蜂来说,当超过4cm的时候,音量衰减一半。下面这个图表现了,最小和最大距离对飞机和蜜蜂音量的影响。
Directsound的缺省的最小距离DS3D_DEFAULTMINDISTANCE 定义为1个单位,或者是1米。我们规定,声音在1米处的音量是full volume,在2米处衰减一半,4米处衰减为1/4,一次类推。对于大多数声音来说,我们要设置一个比较大的最小距离,这样,当声音运动的时候,不至于衰减的这么快。
最大距离,就是就是声源的音量不再衰减的距离,我们称为声源的最大距离。对于Directsound 3D buffer缺省的最大的距离DS3D_DEFAULTMAXDISTANCE 是1 billion。 也就是说,当声音超出我们的听觉范围以外的时候,衰减还是在继续。在VXD驱动下,为了避免不必要的计算处理,我们在创建buffer的时候就要设置一个合理的最大距离。
最大距离同时也用来避免某种声音听不到。例如,如果你将某种声音的最小距离设置为100m,那么声音可能在1000m的处衰减的可能就听不到了,你可以将最大的距离设置为800m,这样你就可以保证声音在无论多远处都为原音量的1/10。
记得,缺省的单位是m。
图3 最大最小距离
处理模式
Sound buffers 有三种处理模式,normal, head-relative, and disabled。
在正常模式下,声源的位置和方向是真实世界中的绝对值,这种模式适合声源相对于听者不动的情形。
在head reative 模式下,声源的所有3D特性都跟听者的当前的位置,速度,以及方向有关,当听者移动,或者转动方向,3D buffer 就会自动的重新调整 world space 。这种模式可以应用实现一种在听者头部不停的嗡嗡叫的声音,那些一直跟随着听者的声音,根本没有必要用3D声音来实现。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash