关键字: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这一章。
为了写代码,用这么多文字介绍这些预备知识是值得的