首页 > 编程 > .NET > 正文

用VB.Net实现DirectSound9 (4) DS3D

2024-07-10 13:00:52
字体:
来源:转载
供稿:网友
关键字: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这一章。

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


中国最大的web开发资源网站及技术社区,
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表