从内核流式处理拓扑到音频混音器 API 的转换

混音器 API 是一组 Windows 多媒体函数,用于检索有关音频混音器设备的信息。 混音器 API 将音频混音器线分类为源和目标线。 源线路是音频卡的输入(例如 CD、麦克风、线路输入和波形)。 目标线路是卡的输出(例如扬声器、耳机、电话线路和波形输入)。 要使源线路有效,它应具有从源到目标的唯一路径。 单个源线路可能映射到多个目标,但单个路径不能将源线路连接到目标线路。 有关混音器 API 的详细信息,请参阅 Microsoft Windows SDK 文档。

音频适配器的 WDM 驱动程序会公开 KS 筛选器拓扑,该拓扑通过硬件和数据路径上可用的功能表示这些路径。 WDMAud 系统驱动程序(在 Wdmaud.sys 和 Wdmaud.drv 文件中)应解释 KS 筛选器拓扑,并生成通过混音器 API 公开的相应源和目标混音器线路。 WDMAud 还处理混音器 API 调用,并将其转换为适配器驱动程序管理的筛选器引脚和节点上的等效属性调用。

KMixer 系统驱动程序 (Kmixer.sys) 和 SWMidi 系统驱动程序 (Swmidi.sys) 是内核音频堆栈的组成部分。 KMixer 为 PCM 音频流提供系统范围的音频混合、位深度转换、采样率转换和声道到扬声器配置(超级混合)转换。 SWMidi 提供 MIDI 流的高质量软件合成。 系统音频驱动程序 SysAudio(Sysaudio.sys;请参阅 SysAudio 系统驱动程序),将 KMixer 和 SWMidi 的功能与已安装的音频适配器驱动程序相结合,形成功能增强的虚拟音频设备

WDMAud 会管理 KS 部分与音频堆栈的旧版(请参阅 WinMM 系统组件)部分之间的接口。 WDMAud 将 SysAudio 虚拟化筛选器上的引脚转换为在 SndVol32 等应用程序中呈现的旧混音器线路。 将 KS 拓扑转换为混音器线路,如下所示:

  • KS 拓扑中的源引脚 (KSPIN_DATAFLOW_OUT) 被公开为目标混音器线路 (MIXERLINE_COMPONENTTYPE_DST_XXX)。

  • KS 拓扑中的接收器引脚 (KSPIN_DATAFLOW_IN) 被公开为源混音器线路 (MIXERLINE_COMPONENTTYPE_SRC_XXX)。

  • WDMAud 从位于筛选器图终结点的源引脚开始遍历 KS 筛选器图,并按与数据流相反的方向遍历该图,直至到达接收器引脚。

  • 遍历过程中遇到的每个 KS 节点上支持的属性公开为源混音器线路上的控件。

在上面的前两个项中,KS 源和接收器引脚到目标和源混音器线路的映射可能会令人困惑,因为术语存在差异。 在 KS 中,设备包装在具有接收器(输入)引脚和源(输出)引脚的筛选器中。 术语“接收器”和“源”不是指筛选器,而是指两个筛选器之间的(通常缓冲)连接:

  • 上游筛选器的源引脚是进入连接的数据流的源。

  • 数据流通过下游筛选器的接收器引脚退出连接。

相比之下,混音器线路术语以设备为中心:

  • 源混音器线路是进入设备的流的来源。

  • 目标混音器线路是退出设备的流的目标。

此外,KS 术语在流流动方向上有点不一致,它分配给 KS 筛选器上的引脚。 引脚描述符使用 KSPIN_DATAFLOW 枚举值来指定方向:

  • 通过接收器引脚进入筛选器的流的方向为 KSPIN_DATAFLOW_IN。

  • 通过源引脚退出筛选器的流的方向为 KSPIN_DATAFLOW_OUT。

“in”和“out”方向显然以筛选为中心,而术语“接收器”和“源”则以连接为中心。

有关 WDMAud 使用的拓扑分析算法的详细信息,请参阅 WDMAud 拓扑分析

本节还包括:

拓扑引脚

拓扑节点

SysTray 和 SndVol32

公开筛选器拓扑