指定拓扑

硬件供应商确定要为波形和 MIDI 设备写入的微型端口驱动程序后,下一步是表示这些设备的内核流式处理 (KS) 拓扑。 KS 拓扑包含一组数据结构,这些结构描述音频或 MIDI 流在流经每个设备时所遵循的数据路径。 通过此拓扑,驱动程序公开位于每个路径上的控制节点(例如卷控件)。 通常,应用程序使用 Windows 多媒体混音器Xxx 函数通过枚举每个路径上的节点序列来探索拓扑。 例如,发现卷级控制节点后,应用程序可以在该节点上设置卷级别。 有关 Windows 多媒体的详细信息,请参阅 Microsoft Windows SDK 文档。 有关混音器Xxx 函数的 KS 拓扑表示的详细信息,请参阅 内核流式处理拓扑到音频混音器 API 转换

PortCls 提供六个端口驱动程序:WavePci、WaveCyclic、WaveRT、MIDI、DMus 和拓扑。 (自 Windows Vista 以来已提供 WaveRT,建议使用此方法。拓扑端口驱动程序控制音频适配器线路的部分,这些线路将来自波形和 MIDI 设备的呈现流混合在一起。 它还控制从输入插孔中选择捕获流。 尽管其名称有些误导性,但拓扑端口驱动程序并不体现音频适配器的所有拓扑,尽管它通常包含大部分音频适配器。 其他端口驱动程序贡献适配器拓扑的剩余部分。

每个端口驱动程序与相应的微型端口驱动程序配对,以形成 KS 筛选器,该筛选器 表示音频适配器上的特定设备(波形、MIDI 或混音器),如下表所示。

筛选器类型 说明

WaveXxx 筛选器

表示将波形输出流转换为模拟音频信号或将模拟音频信号转换为波形输入流的波形设备。

MIDI 或 DMus 筛选器

表示播放或捕获 MIDI 流的 MIDI 设备。

拓扑筛选器

表示适配器的混音器电路。

微型端口驱动程序实现筛选器的设备特定功能,包括设备包含的适配器拓扑部分的定义。 端口驱动程序负责每种筛选器类型的通用筛选器操作,包括与操作系统的通信。

每个筛选器都有一个或多个 KS 引脚,这些引脚 充当要输入和离开筛选器的音频数据流的路径。 通常,拓扑筛选器上的引脚通过适配器线路中的硬连接与波形、MIDI 和 DMus 上的引脚绑定。 这些筛选器及其互连共同构成了一个 KS 筛选器图,该图体现了适配器的拓扑。

下图显示了示例音频适配器的拓扑。

Diagram showing the topology of an audio adapter with connections among MIDI, WaveXxx, and topology filters.

在上图中,顶层的拓扑由 MIDI、WaveXxx 和拓扑筛选器之间的连接组成。 此外,每个筛选器都有自己的内部拓扑,该拓扑包含通过筛选器的数据路径以及沿每个路径的控制节点。 节点的标签如下表所示。

Label 说明 KS 节点类型 GUID

Synth

合成器节点

KSNODETYPE_SYNTHESIZER

DAC

数字到音频转换器节点

KSNODETYPE_DAC

ADC

模拟数字转换器节点

KSNODETYPE_ADC

体积

卷级控制节点

KSNODETYPE_VOLUME

静音

将控制节点设为静音

KSNODETYPE_MUTE

求和

求和节点

KSNODETYPE_SUM

MUX

多路复用器节点

KSNODETYPE_MUX

在上图中,音频适配器左侧的引脚表示逻辑连接(而不是物理连接),数据流从系统总线输入适配器或从适配器输入系统总线。 这些引脚在逻辑上连接到适配器外部的其他筛选器(未显示)上的源和接收器引脚。 通常,这些筛选器是软件模块,与适配器拓扑一起形成更大的筛选器图,其拓扑可由使用混音器Xxx 函数的应用程序浏览。 例如,上图中标有“PCM Wave Out”的引脚在逻辑上连接到 Windows 中的用户模式音频引擎。 这些逻辑连接通过系统总线的 DMA 传输进行维护。

相比之下,拓扑筛选器左边缘的引脚在物理上连接到 MIDI 和 WaveXxx 筛选器上的引脚。 这些连接是硬连接,不能由软件更改。

音频适配器右侧的桥钉表示系统机箱上的音频插孔。 这些引脚称为 桥钉, 因为它们桥接 KS 筛选器图与外部世界之间的边界。

筛选器、引脚和节点通常具有音频驱动程序的客户端(内核模式组件或用户模式应用程序)可访问的属性。 客户端可以将 KS 属性请求发送到筛选器、引脚或节点,以查询属性的当前值或更改属性值。 例如,卷级控制节点具有 KSPROPERTY_AUDIO_VOLUMELEVEL 属性,客户端可以通过 KS 属性请求更改该属性。 求和节点是通常没有属性的节点类型的示例。

为简单起见,上图中的 WaveXxx 筛选器仅提供一个引脚,用于接受来自系统总线的 PCM 波形输出流。 相比之下,某些波形设备为 PCM 波形输出提供多个引脚,并包含用于在内部混合输入引脚的流的硬件。 这些设备通过接受从应用程序的声音缓冲区播放的 PCM 流,为使用 DirectSound 的应用程序提供硬件加速。 要使 DirectSound 使用这些引脚,它们必须为二维(2-D)和三维(3-D)处理提供额外的节点,如 WDM 音频中的 DirectSound 硬件加速中所述

Windows Server 2003、Windows XP、Windows 2000 和 Windows Me/98 支持这种类型的硬件加速,但在 Windows Vista 中不受支持。 Windows Vista 不使用旧版波形设备上的硬件加速引脚。

在上图中,MIDI、WaveXxx 和拓扑之间的物理连接会筛选所有传输模拟音频信号。 但是,不同的拓扑设备可以通过接受 MIDI 和波形设备的数字输出流、数字混合它们并将数字混合转换为模拟输出信号来实现类似的效果。

上图左下角的“非 PCM 波形输出”引脚接受 S/PDIF 直通格式的非 PCM 输出流,例如 AC-3-over-S/PDIF 或 WMA Pro-over-S/PDIF。 使用其中一种格式,设备只需通过 S/PDIF 链接传输压缩数据,而无需解码数据。 因此,上图右下角的“S/PDIF Out”引脚的数据路径不包含卷或静音节点。 有关非 PCM 音频格式和 S/PDIF 直通传输的详细信息,请参阅 支持非 PCM 波形格式非 PCM 流的 S/PDIF 直通传输。

微型端口驱动程序以PCFILTER_DESCRIPTOR结构的形式将其拓扑呈现给端口驱动程序。 此结构描述筛选器的所有引脚和节点,并指定引脚和节点如何相互连接。

音频适配器中的混音器线路可以分区为多个拓扑筛选器,而不是设计整体拓扑筛选器,如上图所示。 例如,在上图中,驱动扬声器的数据路径可以作为一个拓扑筛选器实现,并且从输入设备捕获音频数据的数据路径可以作为单独的拓扑筛选器实现。 当特定拓扑筛选器中的数据路径未使用时,可以在不禁用整个适配器的情况下关闭适配器的该部分。 有关详细信息,请参阅 动态音频子类别