X3DAudio 概述
X3DAudio 是一种与 XAudio2 配合使用的 API,用于在 3D 空间中定位声音,以创建来自空间中某个点相对于相机位置的声音的错觉。特别是,具有 3D 场景的游戏需要使用 X3DAudio。 不需要 3D 定位的声音(如配乐或未定位的环境声音)可能会完全绕过 X3DAudio。
侦听器和发射器
为了管理 3D 空间中的声音,X3DAudio 采用 侦听器 和 发射器的概念。 侦听器和发射器表示听到 3D 声音的任何位置,以及这些声音的来源点。
- 侦听器定义为空间中的点和方向。 它是 听到声音的位置。 侦听器的位置和方向通常与相机的位置和方向相同。 无论游戏使用第一人称还是第三人称透视视图,都是如此。 侦听器的位置以世界坐标表示。 请务必注意,侦听器 相对于 发射器的位置决定了如何计算最终说话人音量。
- 发射器定义为声音 源自空间中的一 (个或多个) 点。 发射器的位置可以是 3D 空间中的任意位置。 与侦听器一样,发射器的位置以世界坐标表示。 发射器 相对于 侦听器的位置决定了最终说话人音量的计算方式。
- X3DAudio 使用左手坐标。 若要与右手坐标一起使用,开发人员需要否定 X3DAUDIO_LISTENER 和 X3DAUDIO_EMITTER 的 OrientTop、OrientFront、Position 和 Velocity 成员的 .z 元素。
除了位置,侦听器和发射器还可以包括速度。 与 3D 渲染引擎不同,X3DAudio 仅使用速度来计算多普勒效果, (它不用于计算位置) 。
有关侦听器和发射器的更多详细信息,请参阅 X3DAUDIO_LISTENER 和 X3DAUDIO_EMITTER 结构参考主题。
将 X3DAudio 与 XAudio2 配合使用
对于 X3DAudio 和 XAudio2 之间的所有交互,请使用以下 X3DAudio 函数。
-
调用 X3DAudioInitialize 函数以初始化 X3DAudio。 通常,除非扬声器配置发生更改,否则只需在游戏生存期内调用 X3DAudioInitialize 一次。
-
初始化 X3DAudio 后,可以通过将声音的发射器和侦听器传递给 X3DAudioCalculate 函数来确定给定声音的音量和其他值。 然后, X3DAudioCalculate 计算的值可以应用于 XAudio2 语音或效果,以适合传递给函数的标志。 可以使用 IXAudio2Voice::SetOutputMatrix 和 IXAudio2SourceVoice::SetFrequencyRatio 方法将 X3DAudio 计算的音量和音调值应用于语音。 X3DAudio 计算的其他值需要使用 IXAudio2Voice::SetEffectParameters 方法应用于混响效果。
有关将 X3DAudio 与 XAudio2 配合使用的分步示例,请参阅 如何:将 X3DAudio 与 XAudio 集成
相关主题