科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件利用Directsound 3D实现游戏中3D音效

利用Directsound 3D实现游戏中3D音效

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文通过一个示例演示了如何采用微软的Directsound 3D 实现3D环绕立体声。

作者:智慧的鱼 来源:天极开发 2007年10月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
最大最小距离

  当听者越接近声源,那么听到的声音就越大,距离减少一半,音量会增加一倍。但是,当你继续接近到声源,当距离缩短到一定距离后,音量就不会持续增加。这就是声源的最小距离。

  声源的最小距离,就是声音的音量开始随着距离大幅度衰减的起始点。例如,对于飞机,这个最小距离也许是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声音来实现。

  在 disable 模式下,3 D 声音失效,所有的声音听起来好像发自听者的头部。

  声音的锥效应

  没有方向的声音在各个方向上的振幅都相同,有方向的声音在该方向上的振幅最大,声音的锥效应分为内部的锥效应,和外部的锥效应,锥的外部的角度应该大于等于锥的内部角度。

  在锥的内部,在考虑到buffer中的基本的音量,以及距离听者的距离远近,何听者的方向,声音的音量就跟没有锥效应一样。
在锥的外部,正常的音量被削弱了,从0到负的百分之几分贝。

  在锥体的内部和外部之间,是一个过渡带,从内部的volume 到外部的volume,这个音量的逐渐的降低。下面的图表显示了声音的锥效应。


图4 声音锥

  每一个的3D buffer都有一个声音锥,但是缺省的情况下,每一个3D声音 buffer都像一个没有衰减的 声源,因为锥体内外都没有声音的音量的降低,锥的角度内外的角度是360度,除非我们的应用程序改变这个设置,否则的话,3D声音没有方向感。

  利用3D声音,可以给你的程序添加比较奇异的特技,例如,你可以将声音源放到房间的中间,将声源的方向朝向门的方向,然后将声音的锥体角度包含门的宽度,将锥体的外部设置的更宽一些,然后将锥体的外部音量设置为0。这样,当听者只有在门的附近才能听到声音,在正对门的位置,声音才更响。

  关于Directsound 3D的一些相关的概念先介绍到这里,下面我们就可以开始我们的3D音效之旅了。我提供了一个demo,下面我们分析如何编程来实现3D音效。Demo的界面如下:


图5 demo界面

  这里要说明一下,这个demo实现3D音效的方法是采用的第二种方法,即听者不动,使声源运动的方法来产生3D音效。这里设置声源在一个平面上来运动,设置y轴为零。

  象声源一样,3D世界中的听者也有位置,速度和方向。 如下图


图6 听者的坐标系

  向上的向量指向头的顶部,前向的向量指向听者的面部正前方,缺省时,front向量是(0.0, 0.0, 1.0),,顶部的向量是(0.0, 1.0, 0.0).,如果需要的话,Directsound可以调整front 向量,因为它在top向量的右向。所以,我们这个demo设置的buffer运动轨迹在一个平面内,如上图,我们选择的平面是y=0,所以,我们在这个demo听起来,就好像声音在绕着我们的头部不停的在转动。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章