虚拟场景中的3D音频的分析与实现

本文作者:admin       点击: 2010-01-13 00:00
前言:
摘要:本文从我国的虚拟场景中音频制作现状出发,分析了虚拟场景中的3D音频的产生因素及各种音效实现技术现状,最后介绍了 Directx8.0技术并用DirectSound8实现3D声音播放的例子,通过使用Directx8.0其中的DirectSound8实现虚拟场景的3D音频效果,使声音听上去更为真实。
    关键词:虚拟场景; 3D音频; DirectX 8.0

    Abstract: This article discusses from the virtual scene in China's audio production , and analyzes a 3-D audio of the virtual scene in the formation of various factors and audio technology to achieve the status quo, finally introduces Directx8.0 technology used DirectSound8 achieve 3-D sound player example, through the use of Directx8.0 which DirectSound8 Virtual Scene 3-D audio effects, voice sounded more real.
    Key words:  virtual scene ;3D audio;DirectX 8.0


引言:在虚拟现实的场景中,声音效果是必不可少的,没有其他任何元素能取代声音的作用和表现力,但目前国内虚拟场景中的音频制作现状令人担忧,在国内虚拟场景中的音频制作主要是游戏音频制作。国内的游戏音频制作是从单机时代开始的,那时有很多专业音乐制作人加入到游戏音频制作中,但随后的单机游戏泡沫破灭,很多音乐制作人离开了游戏业,客观上导致了国内的游戏音频制作一直处于非专业性的现状,这样国内的游戏音频制作采取“外包”形式来制作,这样游戏音乐与游戏内涵很难融合一个整体,所以虚拟场景中的音频制作是比较滞后的。本文讨论一下在虚拟场景中的音频的有关问题,以引起大家对虚拟场景的音频的关注。

一、3D音频产生因素的分析

虚拟现实系统要求计算机实时提供一个三维场景,使用户可以在其中自由的漫游,并能操纵虚拟世界中一些虚拟物体。随着虚拟现实技术的发展,用户对虚拟场景的操作不仅仅限于漫游,还要有3D音频效果,通过声音提示和模拟,以产生更高层次的真实感。在增强现实系统中, 声音信息一方面可以为实时叠加到真实世界中的虚拟场景伴音, 产生视觉和听觉的叠加效应,达到声像融合, 另一方面可补充由于视野所限、视景未显示到的信息,使人可监控、识别来自任何方位的信息,不仅仅是视野内的方位信息。用户应该能够听到虚拟场景中从它所处的位置发出的声音, 当虚拟场景发生位置改变时, 用户应该能够听到声音随之发生的变化。这就是增强现实环境下的声音仿真所要达到的主要效果,利用数字信号处理技术和多媒体技术相结合,开发计算机实时音响系统,能产生逼真的三维声音效果,在虚拟场景中到底3D音频产生机制是什么和怎样解决?大致有以下几个方面需解决:

1、3D定位
现实中的声音传播是依靠声波作为媒介,人的耳朵就是声音的接收器,每个人的耳朵都有各自的特性,可以在不同情况下反映声音的真实情况。现实中的声音产生,如人的声音是通过声带,而计算机中是通过声卡和扬声器来完成的。虚拟场景中3D声音定位主要也是通过耳朵来分辨的。他的基本原理包括以下几个方面:

(1)、耳间时延量差。从声源发出的声音到人的两只耳朵的距离是不同的,因此人从不同的角度听到声音的时间是不同的,通过耳间时延可以毫不困难的能分辨不同的方位,以及所处的大概距离。

(2)、两耳音量差。从声源发出的声音到人的两只耳朵的距离是不同的,声音在传播的过程中遇到的障碍物也不同,声音的衰减情况也不同,因此从不同的角度两耳听到声音的大小是不同的,通过耳间声音的大小可以毫不困难的能分辨不同的方位,以及所处的大概距离。

(3)、消音。耳朵的外形和方向导致声音从后边到达比从前边到达的消音要稍多一些,另外,如果声音来自右(左)边在声音到达左(右)耳之前也会被头部消音

(4)、耳廓效应。 耳廓对不同方向到达的声音的音调和同步性引起了细微的变化。 在虚拟场景中,这些效应我们可以借助采用的HRTF(头部相关传输函数)算法的声卡芯片来实现,HRTF英文全写Head Related Transfer Function,就是在三维立体空间里,人耳监测和分辨出声音来源的方法。如果用户在声音的交汇点处,由于人的大脑只能分辨左右的区别,分辨不出前后方位产生的细微差别。解决的方法是在声音系统中,增加一个增强前后差别的办法,把前后方位变化产生的差异弥补回来,利用声音芯片进行处理,然后发送经过计算的环绕声音数据到新增的环绕扬声器。因此我们可以借助多扬声器配置来解决

2、音效的距离效果
现实中,发声源距离用户越远声音越小,越近声音越大,在虚拟场景中,最简单的设计方法,在远距离时降低音量级,必须确定出一个最小距离,当声音在该距离范围之内,距离越远用户所听到的声音级就按照距离的比例消减。所以在设定最远距离之前,声音会一直减弱,直至最后声音会因为距离太远而听不见,目前可以借助动态的3DEAXHFRolloff和Macro FX技术,动态的3DEAXHFRolloff技术应用程序接口进行模块化的高频率衰减,利用这种衰减机制扩展DirectSound3D的模拟声效距离,与现实世界的声音类似;Macro FX技术比较适用于近声场,使音源在听众耳朵里听起来特别近,使用Macro FX技术对周围声波进行精确模块化,并对数据的传输时使用高效率的算法。

3、音频的环境模拟
为了把音效完全融合到虚拟场景里面,给人亲临其境般的3D音效,必须计算环境和声源的交互作用。

(1)声波追踪技术
随着声音的传播,声波与环境具有相互干涉的作用。声源发射出的声波,具有以下几种不同的途径被人耳所感知:声波直接从声源传入人耳;声波经过某个界面的反射后被人耳感知;声波进入人耳之前,经过多次的界面之间的反射;在声源与人耳之间存在隔音设备或遮挡物体,其结果使人耳无法感知声源播放的声音。声波追踪算法根据声波在空间中的传输方式,从声源出发,发射声波并依据场景的三维几何属性进行描述,计算声波在空间中反射、折射等不同的传播途径与衰减程度,最终获得人耳所感知的各个方向的声音。经过声学设计的环境,使用声波跟踪算法能够过得逼真的混合三维音效,但是现在“声波追踪”技术的应用还相当有限,在硬件的支持方面也有不足,想得到真实的声音效果是比较困难的。

(2)声音的封闭效果
声音的封闭效果在目前的虚拟场景中有广泛的应用,最简单的是角色身处一个比较宽阔的山洞中时,封闭效果尤为明显,声音的封闭效果可以通过调低音量,模拟发出低音来实现,但低音量调过低,效果会有很大影响,因此更加实际的实现办法是使用低通过滤的方法。

(3)声音的障碍效果
是声源和人耳之间存在遮挡物,但声源和人耳在同一区间中,因此反射将被人耳感知,最为典型的例子是在角色和声源之间有一根柱子,虽然声音无法直接从柱子中穿透,但由于房间中的回声角色仍然听得到这个声音,但它和声音直接传递的效果是不同的。

(4)声音的排斥效果
声源和听众在不同的房间,但它们有直接的接触,直接的声音可以传到听众,但反射的声音会发生失真这种失真的具体情况,他依据音源和玩家之间的障碍物的材料厚度、形状和属性来决定。

(5)多重声音效果
利用多重声音效果,可以同时为游戏加入多种声音效果,玩家可以同时接收到声音的封闭、障碍和排斥效果,也可以是虚拟场景增加声音失真以及环境的渐变效果。

上述音频都需要场景几何之间的声波传播计算。由于真正的三维几何声波传播计算耗费资源,因此虚拟场景中用于声音计算的几何通常非常简单,最简单的三维音效是立体声。
  
二、DirectSound模拟3D音效

虚拟场景中声音效果开发如果应用了先进接口程序和API,那么整个开发将事半功倍。但遗憾的是现在可供选择的音频引擎并不多,应用最广泛的就是DirectSound。利用DirectSound能够提供用户对方位的判断、增加场景的沉紧感、暗示情节的发展。

1、DirectX 8.0简介
DirectX是微软公司开发的具有广泛用途的应用程序接口。它提供了一整套的多媒体接口方案。DirectX开发之初,是为了弥补Windows 3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。 DirectX从推出到今天版本已经由1.0到9.0。它其实是一种接口标准。利用该标准开发出的游戏程序,并不关心硬件的底层操作的细节问题,能对硬件的性能进行最大限度的控制和利用,从而实现游戏操作上的提速。

下面以DirectX8.0组件为研究对象,以VB6.0为应用程序开发平台,介绍一下如何实现游戏的声音混合的技术。DirectX8组件构成:DirectX8对象包含有DirectGraph-ics8 (Direct3D+DirectDraw)、DirectIn-put8、DirectP1ay8、Direct Sound8、DirectShow8、Direct Setup8等多个组件。Direct Graphics8包含Direct3D和Direct Draw两部分。Direct3D:是一个三维图形包,它提供一个高级的保留模式接口,这使得你能够实现一个完整的三维系统。它还包含一个低级的即时模式接口,使得应用程序获得对渲染管线的完全控制。Direct Draw负责二维图形的绘制。DirectInput8:为游戏杆、鼠标、键盘和游戏控制器等输入设备提供支持。DirectPlay8:提供调制解调器链接或网络来与应用程序相连的支持。DirectSound8:提供硬件和软件的声音混合与回放。DirectSetup8:为DirectX提供了一个简单的安装过程。它简化了更新显示和音频驱动程序的过程,并且确保没有硬件或软件冲突的存在。

2、利用DirectSound8进行声音播放的实现
利用DirectSound8结合VB来进行声音文件的播放,遵循以下的流程:
Step l:加载DirectX8.0组件库到VB设计环境中。方法是:选择“工程”菜单下的“引用”,选DirectX 8 for Visual BasicType Library,单击“确定”按钮。如果用户找不到该项,说明系统没有安装DirectX8.0。可到微软的官方网站( http://www.microsoft.com/china/)去下载directX8.0的安装程序;
Step2:新建DirectX对象实例。SetDx8=New DirectX8.0;
Step3:从Dx8中创建出Direct-Sound8对象。Set Dx Sound= Dx8.DirectSoundCreate("");
Step4:DirectX8对其属下的Direct-Sound8组件做了如下规定,必须设置同应用程序进程的合作模式才可以进行声音的播放。在VB中,实现的代码如下:“Mound.SetCooperativeLevelform1.hWnd,DSSCLPRIORITY”,通过执行Set Cooperative Level函数就实现了Direct8与名称为Form 1的窗体建立了合作关系,换句话说,Dx Sound用Form 1作为声音播放的载体。 
Step5::填充DSBUFFERDESC结构。 DSBUFFERDESC结构作为接下来的步骤的函数的参数来调用,其作用是填写声音播放的具体模式。具体来说,DS-BUFFERDESC结构的1Flag属性具有下列参数:DSBCAPS_ CTRLFREQUENCY:表示声音的频率可以被改动;DSBCAPS_ CTRLPAN:表示声音可以从左声道被移动到右声道;DSBCAPS_ CTRLUOLUME:表示音量的大小可以被改动;DSBCAPS_ STATIC:设置声音播放缓冲方式为静态缓冲。

Step6:在进行前面几步的准备后,接着就到了Play工作了。然而,矛盾的是,DirectSound8对象并没有提供Play方法。必须要用到DirectSound8对象的Create Sound Buffer From File、Create Sound-Buffer或Create Sound Buffer From Resource等方法来创建一个DirectSoundSec-ondaryBuffer8对象。该对象是一个声音缓冲区对象,利用该对象的Play方法才能实现声音的播放。

根据本案例程序设计的安排,在利用DirectSound8进行创建声音缓冲区对象时,选择了Create Sound Buffer From File方法。该方法的含义是从外部声音文件中进行创建。利用类型为DirectSoundSecondary-Buffer8的对象数组来混音,在变量声明处,定义了一个类型为DirectSoundSecondaryBuffer8的对象不定数组:Dim DSB( )As DirectSound-SecondaryBuffer8.利用DirectX 8.0可以实现虚拟场景的3D音频效果,使声音听上去更为真实。
  
结束语

本文从我国的虚拟场景中音频设计现状出发,分析了虚拟场景中的产生3D音频的因素及对各种音频模拟实现技术的分析,最后介绍 Directx8.0技术和用DirectSound8进行声音播放的实现的例子。通过使用其中的DirectSound8实现虚拟场景的3D音频效果,使声音听上去更为真实。