DirectSound 硬件加速概述
许多音频适配器提供 DirectSound 硬件加速,因此能够对一个或多个 DirectSound 流执行硬件混合。 通过卸载 CPU 中的音频混合操作并以硬件速度执行这些操作,硬件混合提高了性能。 除了混合之外,硬件还执行相关操作,例如采样率转换 (SRC)、衰减,以及在软件中需要执行的 3D 处理(可选)。
所有 WaveCyclic 或 WavePci 呈现设备都提供一个或多个用于混合音频流的硬件引脚。 对于单流设备,始终在一个可用的硬件呈现引脚上实例化 KMixer 系统驱动程序。
采用 DirectSound 硬件加速的设备提供多个硬件混合引脚。 每个附加引脚都可用于混合 DirectSound 流。 馈送到硬件混音器引脚中的 DirectSound 流会绕过 KMixer,并避免在 KMixer 中出现软件混合延迟。 只要这些引脚具有符合 DirectSound 节点排序要求的拓扑,DirectSound 即可使用音频设备的所有可用硬件加速混音器引脚。 DirectSound 还要求引脚支持由 KSDATAFORMAT_SPECIFIER_DSOUND 指定的 DirectSound 数据格式(请参阅 DirectSound 流数据格式)。
SysAudio 系统驱动程序始终为 KMixer 保留一个硬件引脚,以便在分配其他(未保留)硬件引脚之后,任何附加流都可以由 KMixer 混合,并馈送到保留的硬件引脚中。
使用 DirectSound 软件和硬件缓冲区呈现波次内容中的图说明了这些概念。
如果音频设备提供足够数量的硬件混合引脚,则所有 DirectSound 应用程序的输出流都可以实现加速硬件。 否则,DirectSound 应用程序有几个选项:
它可以将可用的硬件混合引脚静态分配给需要最低延迟的流。
它可以将引脚视为共享资源池,以便根据需要将可用硬件混合引脚动态分配给流。
有关详细信息,请参阅 Microsoft Windows SDK 文档中有关语音管理的讨论。
DirectSound 可以使用两种类型的硬件混音器引脚:2D 和 3D。 2D 引脚执行 SRC、衰减和混合,但不执行 3D 定位。 DirectSound 可以使用 2D 引脚执行 3D 定位,方法是在软件中执行必要的衰减和频率计算,并将结果应用于 2D 引脚上的相应节点。 相比之下,3D 引脚包含一个 3D 节点,该节点能够直接从 3D 缓冲区和 3D 侦听器属性计算自己的 3D 效果,而不是依赖 DirectSound 执行此操作。 有关 3D 节点的属性列表,请参阅 KSNODETYPE_3D_EFFECTS。 有关 2D 和 3D 引脚的详细信息,请参阅在 WDM 音频中支持 2D DirectSound 加速和在 WDM 音频中支持 3D DirectSound 加速。