ACX 對象的摘要
本主題提供構成 ACX 音訊驅動程式基底之音訊類別延伸模組 (ACX) 物件的高階摘要。 如需 ACX 的一般概觀,請參閱 ACX 音訊類別延伸模組概觀。
ACX 對像是 Windows Driver Framework (WDF) 物件 - WDFOBJECT。 如需 WDF 的詳細資訊,請參閱 Framework 物件簡介。 如需 WDF 物件的摘要,請參閱 Framework 物件的摘要。
ACX 物件階層
在ACX中(如同 WDF 中),驅動程式對像是根物件,而所有其他物件都是其子系/子系。 所有 ACX 物件都是驅動程式物件的子系,直接或間接透過其他 ACX 或 WDF 物件。 ACX 驅動程式可以在建立期間指定 ACX 物件的父代。 如果未指定父代,ACX 會使用預設父代,如下列各節所述。
建立非ACX WDF物件
除了 ACX 物件之外,音訊驅動程式還可以視需要建立及使用其他 WDF 物件。 如果驅動程式計劃列舉非 ACX 裝置,則應該使用與建立 ACX/WDF 裝置時建立的預設 WDF 子清單不同的子清單來執行此動作。 驅動程式可以使用 WdfChildListCreate 建立新的 WDF 子清單,如在函式驅動程式中建立裝置物件中所述。 如需 WDF 物件的一般資訊,請參閱 Windows Driver Foundation 的 Framework 物件、WDF 架構和開發驅動程式簡介。 如需初始化 ACX 裝置的相關信息,請參閱 AcxDeviceInitialize。
ACX 線路
AcxCircuit 代表使用者感知音訊裝置的部分或完整音訊路徑(喇叭、麥克風等)。 AcxCircuit 至少有一個輸入針腳和一個輸出針腳(ACXPIN),而且可能會匯總一或多個類似 AcxElements 的物件。 根據預設,AcxElements 會以相同的元件順序「已連線」。
音訊線路是 ACX 的核心建置組塊。 在新的 ACX 架構中,音訊驅動程式會建立一或多個 ACX 線路物件來代表部分或完整的音訊數據/控制路徑。 ACX 會將這些 ACX 線路物件組合在一起,以建立代表音訊端點的完整音訊路徑。 ACX 負責管理 ACX 線路及其相依性。 這些線路的組裝順序可以在初始化時以靜態方式定義,或在運行時間動態定義。
ACX 架構中的音訊端點是一或多個 ACX 線路的集合。 多重線路音訊路徑中的每個 ACX 線路都必須屬於不同的 PnP 裝置堆疊。 ACX 驅動程式可能會在初始化時建立一或多個線路,或在運行時間建立線路,例如在偵測新的音訊元件之後,或因為它以 ACX 註冊為特定線路類型的處理站,而 ACX 架構要求處理站元件建立該類型的新線路(請參閱本主題稍後所述的 ACX 線路管理員/Factory)。
AcxCircuit 可能有一或多個數據流。
AcxCircuit 有專用的 WDF 佇列。 如需 WDF 佇列的詳細資訊,請參閱 Framework Queue Objects。
ACX 線路的 DIS 會在 acxcircuit.h 標頭中描述。
ACX 針腳
如同 WDM Portcls 音訊驅動程式,而 AcxPin 物件代表邏輯連線(而非實體連線),數據流會從系統通訊總線輸入配接器,或從配接器輸入系統通訊總線。
針腳的 DIS 會在 acxpin.h 標頭中描述。
ACX 數據流
AcxStream 代表特定線路硬體上的音訊串流。 AcxStream 可能會匯總一或多個類似 AcxElements 的物件。 根據預設,AcxElements 會以相同的元件順序「已連線」。 AcxStream 只會與一個 ACX 線路相關聯。
- AcxStream 有專用的 WDF 佇列。 如需 WDF 佇列的詳細資訊,請參閱 Framework Queue Objects
- AcxStream 支援不同的狀態。 這些狀態表示音訊何時流動(RUN 狀態)或未流動(PAUSE 或 STOP 狀態)。
- 目前 ACX 支援兩種類型的數據流:非串流線路所使用的基本 ACX 資料流物件,以及串流線路所使用的 ACX RT 資料流物件。
數據流的 DIS 定義於 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 物件之上。
目標的 DIS 定義於 acxtargets.h 標頭中。
ACX 串流網橋
AcxStreamBridge 物件是由線路用來傳播串流建立、串流狀態轉換和線路區段之間的DRM設定。 這個物件只會用於多重線路(音訊複合)案例中。 驅動程式可能會將一或多個 ACXSTREAMBRIDGE 對象與網橋接產生關聯。 網橋接腳是 ACXPIN,會以邏輯方式連接到另一個線路上的對應 ACXPIN。
Stream 的 DIS 會在 acxstreams.h 標頭中描述。
ACX 音訊引擎節點線路配置範例
下圖說明 ACX 線路。 主機和卸除針腳是線路的輸入,具有可用於回應取消的回送針腳。 輸出可能是路由傳送至喇叭的網橋接腳。
請注意,驅動程式不需要在線路/元素以與新增至線路相同的順序連線時,執行明確連接的步驟。
根據預設,ACX 會連接從線路 ACX 要求接收針腳開始的元素,並結束於轉譯和擷取裝置的線路裝置網橋接腳。
ACX 管理員
ACX 管理員用於系統工作,例如支援複合音訊端點。 這些類型的端點是由來自相同或不同廠商的一或多個驅動程式堆疊所管理。 用戶端可以在 ACPI 中預先設定此設定,或使用 ACX 管理員的 DDI。 ACX 管理員的 DIS 會在 acxmanager.h 標頭中描述。
ACX 物件包
ACX 物件包可用來儲存各種數據類型。 ACXOBJECTBAG 可以在各種 DIS 中當做自變數傳遞。 Object Bag 的 DIS 會在 acxmisc.h 標頭中描述。
ACX 物件摘要
下表列出所有 ACX 物件,並提供每個對象的相關一些基本資訊。
Handle | 名稱 | 目的 |
---|---|---|
ACXMANAGER | ACX 管理員 | ACX Manager 對象,用來管理及控制其他物件。 |
ACXOBJECTBAG | 物件包 | 用於儲存數據以與物件搭配使用。 |
ACXEVENT | ACX 事件 | 針對 KS (核心串流) 事件。 |
ACXEVENTDATA | 事件資料 | 與事件相關聯的數據。 |
ACXPNPEVENT | Pnp 事件 | 針對隨插即用事件。 |
ACXCIRCUIT | 線路 | 本主題中所述的ACX線路。 |
ACXPIN | 釘選 | ACX pin 物件代表邏輯連線,如本主題所述。 |
ACXELEMENT | 元素 | 用來代表任何可新增至 AcxCircuit 或 AcxStream 的專案,例如 AcxVolume |
ACXAUDIOENGINE | 音訊引擎 | 用於轉譯線路來表示 DSP 的 ACX 音訊引擎。 |
ACXSTREAMAUDIOENGINE | 串流音訊引擎 | 在轉譯數據流中用來表示 DSP。 |
ACXKEYWORDSPOTTER | 關鍵詞識別器 | 關鍵詞 spotter,用於擷取線路中的音訊串流中的關鍵詞偵測。 |
ACXVOLUME | 體積 | 用來表示磁碟區、增益、提升。 |
ACXMUTE | 靜音 | 用來表示靜音專案。 |
ACXJACK | 千斤頂 | 用來代表音訊插孔或其他實體連接器。 |
ACXMICARRAYGEOMETRY | 麥克風陣組幾何 | 用來代表麥克風陣組幾何,例如麥克風的位置。 |
ACXPEAKMETER | 尖峰計量 | 當硬體支援尖峰計量功能時使用。 |
ACXSTREAM | 串流 | 用來代表線路所建立的音訊串流,如本主題所述。 |
ACXDATAFORMAT | 資料格式 | 數據格式代表音訊裝置所支援的數據格式。 |
ACXDATAFORMATLIST | 數據格式清單 | 可供使用的音訊數據格式清單。 |
ACXTARGETCIRCUIT | 目標線路 | 用來與不同堆疊公開的遠端線路通訊。 |
ACXTARGETPIN | 目標釘選 | 用來與不同堆疊公開的遠端線路針腳進行通訊。 |
ACXTARGETELEMENT | Target 項目 | 用來代表可新增至 AcxCircuit 或 AcxStream 的目標專案,例如 AcxVolume |
ACXTARGETSTREAM | 目標數據流 | 用來與不同堆疊公開的遠端線路數據流進行通訊。 |
ACXTARGETFACTORYCIRCUIT | 目標線路處理站 | 用來與遠端線路的處理站通訊。 |
ACXSTREAMBRIDGE | 串流網橋 | 由線路用來傳播數據流建立、狀態轉換和線路區段之間的DRM。 |
ACXCOMPOSITE | 複合 | 用來代表多重線路/多堆棧/多廠商串流架構。 |
ACXCOMPOSITEFACTORY | 複合處理站 | 建立複合音訊線路的處理站。 |
ACXFACTORYCIRCUIT | 處理站線路 | 使用特定範本建立線路的處理站。 |
ACXCIRCUITMANAGER | 線路管理員 | 用於建立動態線路的線路提供者。 |
ACXCOMPOSITETEMPLATE | 複合範本 | 複合範本代表部分或完整的音訊系結。 複合範本可以有一或多個線路範本。 |
ACXCIRCUITTEMPLATE | 線路範本 | 線路範本代表部分音訊路徑。 |
ACXAUDIOMODULE | 音訊模組 | 針對自定義第三方新增功能。 |
下列 ACX 物件可用來儲存線路、數據流和線路處理站資訊。
Handle | 目的 |
---|---|
ACXCIRCUIT_INIT | 儲存 ACX 線路初始化數據 |
ACXSTREAM_INIT | 儲存 ACX 數據流初始化數據 |
ACXFACTORYCIRCUIT_INIT | 儲存 ACX 線路處理站所使用的初始化數據 |