DirectSound 节点排序要求

DirectSound 2D 或 3D 混音器引脚应具有包含以下节点序列的节点链:

此列表中的节点按数据流式传输到引脚的顺序显示。 如果保留上述顺序,这些节点之间可以交错其他节点,而不会造成问题。

2D 引脚需要上一个列表中的所有节点,但 3D 节点除外,该节点是可选的。 3D 引脚需要该列表中的所有节点,包括 3D 节点。

SRC(采样率转换)节点应位于 SUM 节点之前。 SRC 和 SUM 节点通常相邻,但这不是一项要求。 IDirectSoundBuffer::SetFrequency 方法(请参阅 Microsoft Windows SDK 文档)会干扰 SRC 节点的重新采样速率。

仅包含 SRC 和 SUM 节点的混音器足以混合由系统驱动程序(如 SWMidi 和 Redbook)管理的流(请参阅 SWMidi 系统驱动程序Redbook 系统驱动程序),但除此之外,DirectSound 还要求 SUM 节点前面有两个音量节点和一个超级混音器节点。 DirectSound 会将 IDirectSoundBuffer::SetVolume 调用产生的音量更改发送到第一个音量节点,并将平移效果从 IDirectSoundBuffer::SetPan 调用发送到第二个音量节点。

DirectSound 可以使用 SetVolumeSetPanSetFrequency 调用控制音量和 SRC 节点,从而在 2D 引脚上产生 3D 效果:

  • SetVolume 调用可以模拟来自侦听器的声音源距离的变化。

  • SetPan 调用可以模拟声音源相对于侦听器的方向变化。

  • SetFrequency 调用可以模拟 Doppler 效果和 HRTF(头相关传输函数)。

超级混音器节点是一个交叉矩阵,可将 M 个输入声道连接到 N 个输出声道,其中 N 应等于设备最终输出流中的声道数。

需要可选的 3D 节点来管理硬件加速 3D 效果(请参阅在 WDM 音频中支持 3D DirectSound 加速),但软件模拟的 3D 处理则不需要。 大多数现有实现都将 3D 节点放置在 SRC 节点之前,以及第一个音量节点和超级混音器节点之间,但其他配置是可能的。

3D 节点的输入流通常包含单个声道。 在 DirectSound 8.0 及更高版本中,只能使用 3D 效果创建单声道 PCM 缓冲区。 但是,早期版本的 DirectSound 支持具有单声道和立体声输入流的 3D 节点,驱动程序应同时支持这两个节点,以确保与较旧的应用程序兼容。