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 之間的任何節點都不會轉譯。
筆記
MUX 中的行名衍生自該行的針腳名稱,不同之處在于將行饋送至 MUX 的行名來自 SUM 或 MUX 節點。 在此情況下,行的名稱是 MUX 或 SUM 節點的名稱。 當混音器驅動程式發現此情況時,它會使用 SUM 或 MUX 節點的名稱來建置虛擬混音器線,然後轉譯 SUM 或 MUX 與 MUX 之間的所有控制項。
拓撲中的 分割 是節點具有多個單一子系的情況。 當單一針腳路由傳送至兩個不同的目的地,但共用一些常見的控制項,例如磁片區或靜音時,這非常有用。 每當遇到分割時,WDMAud 驅動程式都會建立新的行,並複製剖析至分割的所有控制項。 每當遇到分割時,即使遇到終止源行的 SUM 節點,這也會無條件地發生。