从内核流式处理拓扑到音频混音器 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 中,设备被包裹在一个具有下沉(输入)引脚和源(输出)引脚的过滤器内。 术语“sink”和“source”指的不是过滤器,而是两个过滤器之间的连接(通常是缓冲的):

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

  • 数据流通过下游过滤器的汇集引脚退出连接。

相比之下,混音器的术语是以设备为中心的。

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

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

此外,KS 术语在其为 KS 滤波器上的引脚分配流动方向时有些不一致。 引脚描述符使用枚举值KSPIN_DATAFLOW来指定数据流的方向:

  • 通过汇流引脚进入过滤器的流的方向为KSPIN_DATAFLOW_IN。

  • 通过源引脚从筛选器输出的流,其方向是 KSPIN_DATAFLOW_OUT。

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

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

本部分还包括:

拓扑节点

拓扑节点

SysTray 和 SndVol32

公开筛选器拓扑