日期:2012-12-06  浏览次数:20546 次

关键字:VB DirectX9 DirectSound 3D 作者:董含君


昨天去百度搜索DirectSound3D的资料,真是一点都没有。惊讶啊。

google有一些,还是微软的。看来真的要填补国内空白了。

高手门看来都很忙啊。

========以上是废话================

一开始看微软DSound3D的例子很困难,主要是术语太多,如果准备工作做的不够,可以说几乎看不懂。

从家里翻出一本DirectX的速成教材,看来有解释的必要。

=========以下是正文===============

一个3D的声音,我们可以理解为一个3D的缓冲区(Buffer)

研究D3D的同志们知道,需要创建一个场景,然后设置顶点,光照,摄像机...

DS3D也是类似,大体有一下概念。这些需要跟现实联系起来理解。

1 声源 就是发声的物体。具备很多属性(慢慢讨论)(Buffer3D)

2 listenner 可以理解为听众,同样具备很多属性。(Listener3D)

3 声源与听众之间有各种关系,这就组成了场景,再代码里面不存在,是通过声源与听众的关系体现的。

4 声源是可以移动的,于是他有了位置(Vector3 position)

5 听众也是可以移动的,他也有位置(Vector3 position)

6 声源与听众都有位置,所以存在距离(distance)

7 由于存在距离又可以移动,于是便有了速度。(辅助概念)

8 有了声源的移动跟听众的位置,所以产生了多普勒效应(DopplerFactor)
(不懂?就是接近的物体音调变高,离去的时候相反。还不懂?去看看初中物力教科书....)

9 声音也有特性,比如衰减。距离越远,效果自然不一样。(RolloffFactor)

10 有两种声音:A 360度空间的声音(如爆炸) B 有方向的声音(如说话具有方向性)
对于前者,好说,需要注意的是,听众也有这两种属性。
带有方向的分为3个部分可以想象成3个嵌套的圆锥,声源(你的嘴巴)在顶点位置,发出的声音在最内的圆锥没有感觉出强烈的衰减。但是在外测的圆锥能够明显的感觉到(靠近内侧圆锥听得更加清楚,也许你会进去),最后剩下的就是听不到的了。
(也许你会说现实生活中我朝一个方向喊话,周围都能听到。那是因为波的传播特性以及反射的结果)

以上就是DS3D再现实中的参考模型。如果上面的你不能充分理解,那么你永远无法进入DS3D.

下一步,进入代码。

用设备device创建关联大家都会了,也知道他们都有自己的相关的参数的类,比如listenerParameters,Listener3DSettings

播放声音依赖于Buffer.play()

前3章说的就是如何通过修改Buffer的参数来达到声音效果的不同。

DS3D也是如此,修改Buffer的
application3DSettings.Position = position;(x,y,z,)
application3DSettings.Velocity = velocity;
然后利用这些位置参数
applicationBuffer3D.AllParameters = application3DSettings;

这样听到的声音就不一样了。

实质上,初始化完成DS 以及 DS3D之后,开始播放,我们修改的就是这些参数而已。

跟修改音量类似,只不过音量我们可以直接增大10或者减少5。而修改三维坐标需要用方程来解决罢了。
(也许会用到立体解析几何的知识)

DS3D理解起来不是很难了吧,就是修改坐标参数。其他的多普勒或者衰减微软已经做好了(什么!你要自己做,那你不用看本文了)

至于代码理解起来比较复杂,个人认为微软的例子使用了太多的技巧,导致理解起来难度增大。

下次我自己做个简单的例子,用来结束DS3D这一章。

为了写代码,用这么多文字介绍这些预备知识是值得的