WDMAud 拓扑分析

WDMAud 系统驱动程序会先解析目标混音器线路,然后再分析源混音器线路。 WDMAud 解析目标线路的顺序是 SysAudio 发现这些线路的反向顺序。 例如,首先解析编号较高的引脚。 解析从引脚的直接父级开始,并朝上游方向移动。 每个节点都根据这些规则进行转换,直到解析程序检测到以下一个终止条件:

  • 正在解析的当前节点是 SUM 节点。

  • 当前节点是 MUX 节点。

  • 当前节点具有多个父节点。

SUM 和 MUX 节点是目标线路的经典终止符。 SUM 节点不会生成任何控件。 MUX 节点会在目标行中生成 MUX 控件,其中包含对 MUX 控制的每个源线路的引用。

如果发现多个父级,将立即终止解析。 混音器线路驱动程序会将此条件解释为“虚拟总和”,此总和通过将多个输入组合在一起形成。

目标线路的名称来自该引脚的 KSPROPERTY_PIN_NAME 属性返回的名称。

转换所有目标线路控件后,WDMAud 将开始转换源线路。 同样,WDMAud 解析这些线路的顺序与 SysAudio 查询这些线路的顺序相反。 此外,解析源线路的方向与解析目标线路的方向相反。 WDMAud 解析从引脚开始的每一线路,并朝下游方向继续,直到它检测到以下终止一个条件:

  • 解析程序查找目标线路。

  • 正在转换的当前节点属于目标线路。

  • 当前节点是 SUM 节点。

  • 当前节点是 MUX 节点。

在解析属于目标线路的源线路时遇到 MUX 时,会将其转换为控件。 但是,它仅用作占位符,用于更新稍后存储在目标线路中的 MUX 中的线路编号。 最终线路编号目前尚不可用,因此需要占位符。

MUX 和 SUM 节点都终止源线路,因此,不会转换 SUM 或 MUX 与另一个 SUM 或 MUX 之间的任何节点。

说明

  1. MUX 中的线路名称派生自该线路的引脚名称,但输入 MUX 的线路来自 SUM 或 MUX 节点时除外。 在这种情况下,线路的名称是 MUX 或 SUM 节点的名称。 当混音器驱动程序发现这一点时,它会生成一个虚拟混音器线路,其中包含 SUM 或 MUX 节点的名称,然后转换 SUM 或 MUX 与 MUX 之间的所有控件。

  2. 拓扑中的拆分是节点具有多个子级的情况。 当单个引脚路由到两个单独的目标,但共享一些常见控件(如音量或静音)时,这非常有用。 每当遇到拆分时,WDMAud 驱动程序都会创建一个新线路,并重复解析到拆分的所有控件。 每当遇到拆分时,即使遇到终止源线路的 SUM 节点,也会无条件地发生这种情况。