DirectSound 节点排序要求
DirectSound 2D 或 3D 混音器引脚应具有包含以下节点序列的节点链:
音量节点(请参阅 KSNODETYPE_VOLUME)。
3D 节点(此节点是可选的。请参阅 KSNODETYPE_3D_EFFECTS)。
超级混音器节点(请参阅 KSNODETYPE_SUPERMIX)。
音量节点(用于平移效果)
SRC 节点(请参阅 KSNODETYPE_SRC)。
SUM 节点(请参阅 KSNODETYPE_SUM)。
此列表中的节点按数据流式传输到引脚的顺序显示。 如果保留上述顺序,这些节点之间可以交错其他节点,而不会造成问题。
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 可以使用 SetVolume、SetPan 和 SetFrequency 调用控制音量和 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 节点,驱动程序应同时支持这两个节点,以确保与较旧的应用程序兼容。