AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

使用DirectX 优化声音特性

51自学网 2015-08-30 http://www.wanshiok.com

微软所提供开发工具包括一系列专为游戏和交互DircetX DirectSound 以及 Direct3Dsound音频媒体的程序设计人员开发的强有力的工具。DirectX充分利用了声音加速硬件以尽可能的提高其运行速度,减少CPU的占用时间。但是,音频信号仍然对整个系统的运行产生着重大影响。本文所描述的技术将帮助用户使用DirectSound 以及Direct3DSound以减少音频重放对系统运行的影响。


前 言


微软所提供的开发工具中DirectX 波形声音重放设备是为支持在Windows 95 和Windows NT 中开发游戏和交互媒体应用程序而设计的。 DirectSound 和 Direct3DSound允许你在同一个三维空间中同时运行多个声音文件和移动声音源。只要有可能DirectX ,将充分利用声音加速设备来改善运行状况和减少CPU的使用。但这并不是说你可在三维程序空间运行、编译充斥着大量声音代码的程序,并且随心所欲地将其移来移去。如果你并没有注意如何使用计算机的声音资源你将很快发现,你的计算机的CPU周期绝大部分被你自己添加的一个户外历险游戏的44.1khz,16位立体声的优美声音所占去。


技巧 和 技术


首先,我们来谈谈一些有关的定义。你所熟悉的DirectSound包括以下一些术语:

从缓冲区:

是指用来执行波形数据的应用程序缓冲区。每个执行的波形文件都有一个从缓冲区,每个这样的缓冲区都有自己特定的格式。

主缓冲区:

是DirectSound的输出缓冲区。一般说来,应用程序并非将波形数据直接写入主缓冲区。相反,DirectSound首先在从缓冲区中将波形数据加以合成,然后输入主缓冲区中。注意:仅有一个主缓冲区,并且其格式决定了其输出格式。

静态缓冲区:

包含了内存中的一个完整的声音。因为,通过一次简单操作,你能在缓冲区中写入一个完整的声音。所以,他们对于用户十分方便。静态缓冲区通过声卡的合成加速执行。

流缓冲区:

仅仅为声音的一部分,利用它,我们并不需要大量的内存就能运行较长的声音文件。在利用流缓冲区时,用户必须周期性的在声音缓冲区中写入数据。但是,流缓冲区不能在硬件中进行声音合成。

我们将再次提到 DirectSound 合成器。这种 DirectSound 元件负责从缓冲区中将声音中按位隔行合成。然后执行诸如:音量大小、均衡调节(左右声道平衡)、频率转换,以及三维操纵等操作。当合成器不能识别你通过API存放的组件时(不同于上面所述的任一控制操作),这正是 DirectSound 的 CPU 核心所要做的。一些运行问题将在“ DirectSound 合成器发生了什么情况”的项目中加以讨论。下面的关于合成器和主、从缓冲区之间关系的示意图,将使读者清楚地了解他们之间的关系。


图通过一个简单的示意图阐明缓冲区和 DirectSound 合成器之间的关系


如果 DirectSound 开发小组成员见到上面的示意图,他们将对此不屑一顾。因为,合成器远比上图所展示的优秀。上图中,我并没有任何与合成器相关的三维组件,以及其他类型的进程。

既然,我们获得的背景知识远比上面所述的多,我们将进一步接触其他一系列对我们有用的东西。以下是帮助你最大限度的使用DirectSound功能的一个技术列表。


巧妙使用声音的技巧;


在主缓冲区中使用相同的格式;


将主缓冲区设置为最低存储速率的格式;


在短促频繁的无声时间间隔内连续地使用主缓冲区;


尽可能地使用硬件进行声音合成;


最大限度的保证控制变换;


使用延时的三维进程命令;


下面我们将对上面所述的各项技术作详细的说明。

一.巧妙使用声音的技巧

DirectSound的最为优秀的特征之一就是独立演奏、控制多声道音频信号的能力。一旦声音的设计者真正地掌握了它们,那么,真可以称得上是一本万利。唯一的花费只是CPU指令周期。每个你所使用的从缓冲区都将消耗CPU指令周期。每一次诸如频率量化等的进程操作都将带来CPU指令周期的额外消耗。三维声音将比常规声音消耗更多的CPU指令周期。这些读者能够想象得到吗?

你应该同你的声音设计者坐下来一起探讨一下全方位地利用声音演奏带来的强烈震撼(如果你自己本身就是程序员及声音设计者,那么你就自己一个人静下心来仔细领略一下),思考一下究竟是哪种声音在将你的渴望以久的经历传递给用户的过程中起着最为重要的作用。当可能减少从缓冲区的使用时,请采用声音预混技术。例如:如果你正在一个声道中模仿蟋蟀的低吟,而在另一个声道中记录了田蛙的欢唱以烘托出夏夜的氛围时,请将它们合成到一个声道中。

如果在你的脑海中有应用程序的初步方案,并且在以后将对其进行折衷处理的时候,你应该对该进程进行相当程度的简化。但要记住,想要设计出相当精练的实用声音程序,你需要长时间地字斟句酌。Beatles的Sgt.Pepper's LonelyHearts Club Band 就是一个有创意的伟大杰作。它被记录在一盘四声道盒式录音带中。与此形成对照,现代的音频记录设备提供了至少四十八个声道,并能提供真正的可用来进行实用合成的无限多声道的盒式录音带以及可利用的MIDI序列发生器。

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:如何通过崩溃地址找到出错的代码行  下一篇:程序中嵌入汇编的实例