本主題提供構成 ACX 音訊驅動程式基底的音訊類別延伸模組 (ACX) 物件的高階摘要。 如需 ACX 的一般概觀,請參閱
ACX 物件是 Windows 驅動程式架構 (WDF) 物件 - WDFOBJECT。 如需 WDF 的詳細資訊,請參閱 架構物件簡介。 如需 WDF 物件的摘要,請參閱 架構物件摘要。
ACX 物件階層
在 ACX 中(如同 WDF),驅動程式物件是根物件,而所有其他物件都是其子系/子孫。 所有 ACX 物件都是驅動程式物件的子系,直接或透過其他 ACX 或 WDF 物件間接。 ACX 驅動程式可以在建立期間指定 ACX 物件的父系。 如果未指定父系,ACX 會使用預設父系,如這些各節所述。
建立非 ACX WDF 物件
除了 ACX 物件之外,音訊驅動程式還可以視需要建立和使用其他 WDF 物件。 如果驅動程式計劃列舉非 ACX 裝置,它應該使用與建立 ACX/WDF 裝置時建立的預設 WDF 子清單不同的子清單來執行此動作。 驅動程式可以使用 WdfChildListCreate 建立新的 WDF 子清單,如在 函式驅動程式中建立裝置物件中所述。 如需 WDF 物件的一般資訊,請參閱 架構物件簡介、 WDF 架構 和使用 Windows 驅動程式基礎開發驅動程式。 如需初始化 ACX 裝置的相關資訊,請參閱 AcxDeviceInitialize。
ACX 電路
AcxCircuit 代表使用者可感知的音訊裝置(例如喇叭、麥克風等)的部分或完整音訊路徑。 AcxCircuit 至少有一個輸入針腳和一個輸出針腳 (ACXPIN) ,而且可能會聚集一或多個類似 AcxElements 的物件。 根據預設,AcxElements 會以相同的組合順序「連線」。
音訊線路是 ACX 的核心建置組塊。 在新的 ACX 架構中,音訊驅動程式會建立一或多個 ACX 線路物件,以代表部分或完整的音訊數據/控制路徑。 ACX 會將這些 ACX 線路物件組合在一起,以建立代表音訊端點的完整音訊路徑。 ACX 負責管理 ACX 線路及其相依性。 這些電路的組裝順序可以在初始化時靜態定義,也可以在執行時動態定義。
ACX 架構中的音訊端點是一或多個 ACX 線路的集合。 多線路音訊路徑中的每個 ACX 線路都必須屬於不同的 PnP 裝置堆疊。 ACX 驅動程式可能會在初始化時建立一或多個線路,或可能會在執行階段建立線路,作為外部事件的副作用,例如偵測到新的音訊元件之後,或因為它已向 ACX 註冊為特定線路類型的處理站,而 ACX 架構會要求處理站元件建立該類型的新線路 (請參閱本主題稍後所述的 ACX 線路管理員/處理站) 。
AcxCircuit 可能有一或多個資料流程。
AcxCircuit 具有專用的 WDF 佇列。 如需 WDF 佇列的詳細資訊,請參閱 Framework Queue Objects。
ACX 線路的 DDI 會在 acxcircuit.h 標頭中描述。
ACX 針腳
就像在 WDM Portcls 音訊驅動程式中一樣,AcxPin 物件代表邏輯連線 (,而不是實體連線) ,資料流程會透過這些連線從系統通訊匯流排進入配接器,或從配接器進入系統通訊匯流排。
Pin 的 DDI 是在 acxpin.h 標頭檔中描述。
ACX 串流
AcxStream 代表特定電路硬體上的音訊流。 AcxStream 可能會匯總一或多個類似 AcxElements 的物件。 根據預設,AcxElements 會以相同的組合順序「連線」。 AcxStream 只會與一個 ACX 線路相關聯。
- AcxStream 具有專用的 WDF 佇列。 如需 WDF 佇列的詳細資訊,請參閱 架構佇列物件
- AcxStream 支援不同的狀態。 這些狀態表示音訊何時流動(RUN 狀態)或未流動(PAUSE 或 STOP 狀態)。
- 目前 ACX 支援兩種類型的資料流程:非串流線路所使用的基本 ACX 資料流程物件,以及串流線路所使用的 ACX RT 資料流程物件。
串流的 DDI 定義在 acxstreams.h 標頭中。
ACX 目標
WdfIoTarget 是 WDF 抽象概念,可協助兩個不同堆疊之間的通訊。 如需 WDF IO 目標的詳細資訊,請參閱 I/O 目標簡介。
- 驅動程式使用 AcxTargetCircuit 與由不同技術堆疊公開的遠端電路進行通訊。 AcxTargetCircuit 是使用 WdfIoTarget 實作。
- 驅動程式會使用 AcxTargetPin 與不同堆疊所公開的遠端線路針腳通訊。 AcxTargetPin 是使用 WdfIoTarget 實作,以將訊息傳送至遠端釘選實體。
- 驅動程式會使用 AcxTargetElement 與由不同堆疊所公開的遠端電路元素進行通訊。 AcxTargetElement 是使用 WdfIoTarget 實作,以將訊息傳送至遠端元素實體。
- 驅動程式會使用 AcxTargetStream 與不同堆疊所公開的遠端電路的資料流進行通訊。 AcxTargetStream 是使用 WdfIoTarget 來實作,以建立遠端數據流並變更遠端數據流的狀態。
- 驅動程式會使用 AcxTargetFactoryCircuit 與遠端線路處理站實例通訊。 AcxTargetFactoryCircuit 是使用 WdfTarget 來實作,以將訊息傳送至遠端線路處理站。
上述每個 ACX 類型都支援屬性、方法和事件,以與遠端線路互動。 所有這些類型都是建置在 WdfIoTarget 物件之上。
目標的 DDI 定義在 acxtargets.h 標頭中。
ACX 串流橋接器
線路會使用 AcxStreamBridge 物件來傳播資料流程建立、資料流程的狀態轉換,以及線路區段之間的 DRM 設定。 此物件僅用於多電路(音訊複合)案例。 驅動程式可能會將一或多個 ACXSTREAMBRIDGE 物件與橋接器針腳產生關聯。 橋接針腳是邏輯連線到其他電路上對應 ACXPIN 的 ACXPIN。
Stream 的 DDI 會在 acxstreams.h 標頭中描述。
ACX 音訊引擎節點電路配置範例
下圖說明 ACX 電路。 主機和卸載引腳是電路的輸入,並且有一個可以用於回聲消除的環回引腳。 輸出可能是一個橋接引腳,它將訊號路由到揚聲器。
請注意,當電路/元素以新增至電路的相同順序連接時,驅動程式不需要執行明確連接的步驟。
根據預設,ACX 會從電路的 ACX 要求接收針腳開始,並以電路的裝置橋接針腳結束,以連接渲染和擷取裝置中的元素。
ACX 管理員
ACX 管理員用於系統工作,例如支援複合音訊端點。 這些類型的端點是由來自相同或不同廠商的一或多個驅動程式堆疊所管理。 用戶端可以在 ACPI 中預先設定此設定,或直接使用 ACX 管理員的 DDI。 ACX 管理員的 DDI 會在 acxmanager.h 標頭中描述。
ACX 物件袋
ACX 物件包可用來儲存各種資料類型。 ACXOBJECTBAG 可以傳遞為各種 DDI 中的引數。 物件包的 DDI 會在 acxmisc.h 標頭中描述。
ACX 物件摘要
下表列出所有 ACX 物件,並提供每個物件的一些基本資訊。
| 處理 | 名稱 | 目標 |
|---|---|---|
| ACXMANAGER | ACX 管理員 | ACX 管理員物件,用來管理和控制其他物件。 |
| ACXOBJECTBAG | 物品袋 | 用於儲存資料以與物件搭配使用。 |
| ACXEVENT | ACX 事件 | 針對 KS(Kernel-Streaming,核心串流)事件。 |
| ACXEVENT資料 | 事件資料 | 與事件相關聯的資料。 |
| ACXPNPEVENT | Pnp 事件 | 適用於即插即用活動。 |
| ACX電路 | Circuit | 本主題上述 ACX 線路。 |
| ACXPIN | 針 | ACX 針腳物件代表邏輯連線,如上述所示。 |
| ACXELEMENT | 元素 | 用來表示可新增至 AcxCircuit 或 AcxStream 的任何元素,例如 AcxVolume |
| ACXAUDIO引擎 | 音訊引擎 | 用於渲染電路中以代表 DSP 的 ACX 音訊引擎。 |
| ACXSTREAMAUDIOENGINE | 串流音訊引擎 | 用於渲染串流中,來代表 DSP。 |
| ACXKEYWORDSPOTTER | 關鍵字觀察員 | 關鍵字偵測器,用於擷取電路中,用於音訊串流中的關鍵字偵測。 |
| ACXVOLUME | 音量 | 用於表示音量、增益、提升。 |
| ACXMUTE | 靜音 | 用來表示靜音元素。 |
| ACXJACK | 千斤頂 | 用於表示音訊插孔或其他實體連接器。 |
| ACXMICARRAYGEOMETRY | 麥克風陣列結構 | 用於表示麥克風陣列幾何形狀,例如麥克風的位置。 |
| ACXPEAKMETER | 峰值計 | 當硬體支援尖峰計功能時使用。 |
| ACXSTREAM | Stream | 用來表示電路所建立的音訊串流,如上所述。 |
| ACXDATAFORMAT | 數據格式 | 資料格式代表音訊裝置支援的資料格式。 |
| ACXDATAFORMATLIST | 資料格式清單 | 可供使用的音訊資料格式清單。 |
| ACXTARGET電路 | 目標電路 | 用於與不同協定堆疊開放的遠端電路進行通訊。 |
| ACXTARGETPIN | 目標引腳 | 用於與通過不同堆疊顯露的遠程電路引腳進行通信。 |
| ACXTARGETELEMENT | 目標元素 | 用來代表可新增至 AcxCircuit 或 AcxStream 的目標元素,例如 AcxVolume |
| ACXTARGETSTREAM | 目標流 | 用來與不同技術堆疊公開的遠端電路資料流進行通訊。 |
| ACXTARGETFACTORYCIRCUIT | 目標電路產業 | 用於與遠端電路工廠進行通訊。 |
| ACXSTREAMBRIDGE | 溪流橋 | 由電路用來在不同的電路段之間傳遞流創建、狀態轉換以及數位版權管理(DRM)。 |
| ACXCOMPOSITE | 複合 | 用於表示多電路/多堆疊/多供應商流架構。 |
| ACX合成工廠 | 複合材料工廠 | 創建複合音頻電路的工廠。 |
| ACXFACTORYCIRCUIT | 工廠電路 | 使用特定範本建立電路的工廠。 |
| ACXCIRCUITMANAGER | 電路經理 | 用於動態線路建立的線路提供者。 |
| ACXCOMPOSITE範本 | 複合範本 | 複合範本代表部分或完整的音訊繫結。 複合範本可以有一個或多個電路範本。 |
| ACXCIRCUIT範本 | 電路模板 | 電路範本代表部分音訊路徑。 |
| ACX AUDIO模組 | 音訊模組 | 用於自定義第 3 方插件功能。 |
下列 ACX 物件用於儲存線路、資料流和線路工廠資訊。
| 處理 | 目標 |
|---|---|
| ACXCIRCUIT_INIT | 儲存 ACX 線路初始化資料 |
| ACXSTREAM_INIT | 儲存 ACX 資料流初始化資料 |
| ACXFACTORYCIRCUIT_INIT | 儲存 ACX 線路處理站所使用的初始化數據 |