vb.net2008 DirectX与VB.NET编程(四)3D音效理论篇

这次是3D音效理论篇。
作为DirectSound中最令人瞩目的一个组件,DirectSound3D(简称DS3D)被众多游戏厂商所推崇,其中最值得一提的是CS了,玩家之所以能通过声音判断敌人的位置,DS3D起到了至关重要的一步。下面就开始进入令人激动的DS3D!

===============华丽的分割线===============

学习要点:
·了解向量、三维向量、DirectX的向量类和坐标系;
·了解声源、听众及处理模式;
·了解距离、最大距离及最小距离;
·了解多普勒效应、衰减效应和锥形效应。

·DS3D只能播放单声道声音。

===============华丽的分割线===============

尽管DS3D向我们描述的是一个虚拟的三维空间,但是,我们还是需要使用一些手段来掌握它的规律,因此,我们首不可避免地需要使用一些名词概念,这一篇将完全讲述这些概念。看完这篇文章后你绝对会惊叹DS3D的鬼斧神工。(注:以下“√”代表根号)

===============华丽的分割线===============

向量(Vector):
假设在一个平面中有两个点,A和B,因此,我们可以用一个数学概念来表示A到B之间的位移过程,这个概念便被称作向量。向量拥有两个属性:长度和方向,长度即A与B之间的距离长度,方向即这个位移过程所面对的方向。每个向量都拥有一个值,这个值等于终点的左边减去起点的坐标,即向量AB=(Xb-Xa,Yb-Ya),如果A的坐标为(2,2),B的坐标为(3,3),那么向量AB的值就是(1,1)。由此我们还可以推断向量的值与其位置无关。最后,向量的长度等于√(X*X+Y*Y)

三维向量:
三维向量就是在原向量的基础上加上Z轴,由平面向三维的拓展。同时,三维向量的值应表示为(X,Y,Z),长度的表达式也变为√(X*X+Y*Y+Z*Z)

向量类:
DirectX提供了三个向量类:Vector2、Vector3和Vector4,分别代表二维向量、三维向量和四维向量,这些类都封装在Microsoft.DirectX名称空间中。

坐标系:
DirectX使用的是笛卡尔坐标系的左偏手性,因此,三维空间中的X轴与屏幕水平平行,大小顺序为左小右大;Y轴与屏幕垂直,外小内大;Z轴与屏幕垂直平行,上小下大。更形象的比喻是:你的计算机屏幕是一个平面,你屏幕的上边框就是X轴,左边框就是Z轴,你用一根手指戳进屏幕时,它就是Y轴。

===============华丽的分割线===============

声源:
在现实世界中,我们称声音的起源体为声源,正是由于起源体,声音才得以产生、传播,并被听众听到。在DS3D的虚拟空间中一样,3D音效也是由这些声源产生的,声源具有两个主要属性,位置(Position)和速度(Velocity),而且它们都被归纳为Vecotr3,三维向量(虽然位置这个属性并非向量,但是它也有X、Y、Z三个属性,因此将其归纳为向量是为了方便程序的编写)。

听众(Listener):
听众在DS3D中扮演的角色是声音捕捉者,也就是说,我们最后听到的声音效果实际上是听众这个虚拟物体所听到的声音,听众同样也具有位置和速度两个属性

处理模式(Mode):
DS3D处理声音的模式有3种:Normal、Head-relative和Disabled。
Disabled:屏蔽模式,在这种模式下,声源的位置和方向将完全不影响声音效果,这时声音听起来和没有使用3D音效一样,这种模式适合旁白或者源自听众自己的声音。
Normal:普通模式,在这种模式下,声源的方向将不影响声音效果,这种模式适合爆炸等全方位的声音扩散。
Head-relative:方向模式,在这种模式下,声源的方向和速度都将影响到音效,真正的3D音效即这种模式。
处理模式是声源的属性

===============华丽的分割线===============

距离(Distance):
我们称声源与听众之间的线段长度为距离。根据物理规律,听众听到的音量与距离之间应该成反比例函数关系,即距离越长,音量则越小。

最大距离(Max Distance):
我们知道,声源与听众之间距离越长,听众听到的声音便越小。当声源与听众之间的距离足够远时,远到听众无法声源发出的声音,也就是音量小到可以忽略不计时,我们便可以放弃它们,也就是说当距离到达足够远时,声音太小的音效将不会被播放了,以节省系统资源,除非它们之间的重新距离缩短,听众可以听到声音时,才会被再次播放。这里面所指的足够远就是最大距离。最大距离是声源的属性

最小距离(Min Distance):
同样道理,当距离越短时,声源的音量会不断提高,如果距离足够近甚至重逢时,声音的分贝将远远超出音箱所能播出的范围,因此这里引进了最小距离的概念,用户设定最小距离后,如果距离小于最小距离时,那么音量还是按最小距离计算,这样实际上是间接设置了一个音量上限。最小距离是声源的属性

关于最大距离和最小距离您可以参照图1,这样可能会帮助您理解。

图1

===============华丽的分割线===============

多普勒效应(Doppler Factor):
多普勒效应是物理学中的经典理论,由克里斯丁·多普勒于1842年提出。多普勒效应讲述当声源与听众之间的距离在不断缩小时,那么听众听到的声音的频率将不断变高;反之,如果距离扩大,则频率会减低。当然,用户不必知道这其中原理,只需要设置频率的改变强度——多普勒因子就可以了。多普勒效应是听众的属性

衰减效应(Rolloff Factor):
声音在介质中传播,必将受到阻力的干扰,阻力会使声音出现衰减现象,即声音强度不断减低,直至被忽略。我们可以通过衰减因子来设定虚拟空间中的阻力强度,例如水中的衰减因子与空气中的不同,这样,我们就可以更加真实地模拟出空间场景了。衰减效应是听众的属性

锥形效应(Cone Factor):
如果用户设置了声源,而且这个声源拥有方向,那么,这个声音会对其指定方向(Cone Orientation)的锥形范围形成声音辐射。声音锥分内锥与外锥,内锥有一个内锥角(Inside Cone Angle),外锥则有外锥角(Outside Cone Angle)这与最大距离和最小距离是同样道理的,在内锥中听到的声音是最大音量,在内锥与外锥之间声音由锥外声音(Cone Outside Volume)。 过渡到最大音量,而外锥的声音将永远是锥外声音。 锥形效应请参考图2。

图2

===============华丽的分割线===============

最后需要注意的是:DS3D只能播放单声道的声音!

好了,理论知识准备完毕,下一次开始实践

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------------------...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, t...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integ...