ACX 音訊類別延伸模組概觀

重要

某些資訊與發行前版本產品有關,在正式發行前可能會大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

本主題提供 ACX 音訊類別延伸模組的高階摘要。

ACX 架構建置在 Windows 驅動程式架構之上

為了讓音訊驅動程式更可靠,並提供電腦使用者的最佳體驗,音訊類別 eXtension (ACX) 現在可在早期預覽中取得。 ACX 會為音訊網域定義新的 Windows Driver Framework (WDF) 類別延伸模組。 如需 WDF 的詳細資訊,請參閱 Framework 物件簡介。 ACX 提供許多 WDF 概念,例如 WDF IO 目標。 如需 WDF IO 目標的詳細資訊,請參閱 I/O 目標簡介

ACX 是使用核心模式驅動程式架構來建置, (KMDF) ,而不是使用者模式驅動程式架構 (UMDF) ,以避免在串流時多次與工作切換至核心模式相關聯的任何延遲。 Portcls audio drivers, the current legacy model, are WDM, kernel mode based drivers.

使用 ACX 架構可讓您輕鬆地建立現成可用的音訊驅動程式。 例如,ACX 支援大部分設定的預設完成。 這可讓您更輕鬆地讓驅動程式使用正確的設定,但仍允許自訂。

ACX 架構會將音訊概念公開為 WDF 物件,讓驅動程式可以與串流、格式等 () 互動。 這可讓程式設計體驗保持一致,並可讓較大的音訊驅動程式開發人員社群。

ACX 目標

ACX) (音訊類別延伸模組具有下列目標。

  • 簡化開發簡單獨立音訊驅動程式所需的工作和知識。
  • 減少協力廠商需要開發的程式碼數量。 較少的程式程式碼會減少維護,並讓偵錯更容易。
  • 允許現有的上層使用者模式用戶端 (服務和應用程式) 以原樣執行。
  • 簡化音訊堆疊驅動程式的電源-pnp 管理。
  • 不會影響整體效能,亦即沒有額外的/明顯延遲。
  • 簡化開發多堆疊音訊驅動程式所需的工作。
  • 允許協力廠商驅動程式指定串流時要使用的鎖定機制。
  • 使用 Microsoft 元件部署隔離解決方案,讓驅動程式/APOs 模組獨立且可重複使用。

ACX 架構

此圖說明 acx 架構,其中顯示核心模式中的現有使用者模式應用程式和 ACX 物件,以及堆疊底部的音訊硬體。 除了 ACX 物件之外,驅動程式開發人員還能夠存取 WDF 物件,以利用其驅動程式程式碼,例如電源管理。

說明 acx 架構的圖表,其中顯示使用者和核心模式,其中 WDF 和 ACX 物件位於核心模式,以及堆疊底部的音訊硬體。

ACX 與現有的音訊驅動程式共存

ACX 的設計目的是要與現有的音訊驅動程式共存,以允許彈性地移轉至新的 ACX 驅動程式。

  • 結束、未變更 (WDM 型) 音訊迷你埠驅動程式的二進位相容性是由現有的舊版 Windows 類別驅動程式維護。
  • ACX 目前僅支援 WaveRT 型串流。
  • 舊版 PortCls/Ks 和新的 ACX 堆疊會並存執行。 使用 ACX 並不會強制協力廠商將其目前的音訊驅動程式移植到新的模型。 因為模型提供許多優點,協力廠商可能會主動選擇將其用於未來的音訊開發。

ACX 通用定義

線路 - 代表部分或完整音訊路徑的驅動程式元件。 線路代表現有的端點及其功能。

Stream - 用來代表線路所建立之音訊資料流程的驅動程式元件。 Stream 是由根據父線路的 Elements 所建立的元素清單所組成。

串流線路 - 多堆疊架構中的線路 (部分音訊路徑,) 直接與上層使用者模式串流服務介面。

核心線路 - 多堆疊架構中的線路 (部分音訊路徑) ,以提供音訊端點裝置的身分識別。

元素 - 線路或 Stream 的子元件,代表底線硬體的音訊功能。 這可能是磁片區、靜音或 Jack 元素,或是 DSP 線路上的 Module 元素等等。

端點音訊路徑 - 連接在一起的單一或一組 Circuit 物件,以代表單一音訊端點。 Circuit 物件必須來自屬於相同或不同驅動程式的不同裝置堆疊。

ACX 物件的摘要

如需基底 ACX 物件的摘要,請參閱 ACX 物件的摘要

範例 ACX 驅動程式

系統會更新範例音訊驅動程式 SYSVAD 以使用 ACX。 當此範例可供使用時,將會在這裡連結。

ACX 驅動程式記錄

驅動程式的軟體追蹤通常是以 Windows 事件追蹤 (ETW) 為基礎,這是一種核心層級設施,可記錄核心模式和使用者模式進程的追蹤訊息。 因為 ACX 驅動程式是 WDF 驅動程式,所以 ACX 驅動程式開發人員可以使用所有 WDF 記錄和事件功能。

Wpp

由於 ETW 可能有點複雜,大部分的驅動程式開發人員都會使用 Windows 軟體追蹤預處理器 (WPP) ,這可簡化並增強檢測驅動程式以進行 ETW 追蹤的程式。

ACX 會使用 WPP 記錄進行追蹤和偵錯。 如需詳細資訊,請參閱 在 KMDF 驅動程式中使用 WPP 軟體追蹤將 WPP 軟體追蹤新增至 Windows 驅動程式

In-Flight錄製器 (IFR)

In-Flight錄製器 (IFR) 受到支援,而且可以在可用時透過 WDFKD、RCDRKD 或 ACXKD 偵錯工具擴充功能來檢視。 如需使用 IFR 記錄的一般資訊,請參閱 在 KMDF 和 UMDF 2 驅動程式和視訊中使用 Inflight 追蹤錄製器 (IFR) :在沒有 偵錯工具的情況下存取驅動程式 IFR 記錄

ACX 會使用其他 ETW 提供者記錄重要事件,以簡化這些特殊事件的視覺效果。

將記錄新增至驅動程式

強烈建議協力廠商驅動程式使用 WPP 和 ETW 事件。

此範例程式碼顯示檢查傳回值並記錄適當的錯誤。


    //
    // The driver uses this DDI to delete the circuits from the current device. 
    //
    status = AcxDeviceRemoveCircuit(Device, devCtx->Speaker);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speaker circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->MicArray);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove micarray circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->SpeakerHp);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speakerHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->MicrophoneHp);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove microphoneHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->HDMI);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove HDMI circuit, continuing with ReleaseHardware, %!STATUS!", status); }

精選版本的 Toaster 驅動程式範例程式碼提供 WMI 追蹤的範例,以及可重複使用的追蹤程式碼。 如需有關 Toaster 範例的詳細資訊,請參閱 Toaster 範例驅動程式

ACX 驅動程式記錄的建議

若要改善 ACX 驅動程式的可靠性,請考慮下列記錄行為。

  • 來自資料流程緩衝區 IO 或其他一般訊號處理活動的未預期傳回值。
  • 非預期的電源狀態或電源狀態轉換。
  • 與更新或重新安裝期間呼叫相關的錯誤。
  • 其他可能導致「沒有音訊」的行為可能會被視為記錄。

使用 WMI 追蹤偵錯工具延伸模組

若要在偵錯工具中檢視追蹤事件,請使用 WMI 擴充功能,Wmitrace.dll。 它包含設計用來控制及檢視 WMI 事件追蹤的函式程式庫。 如需詳細資訊,請參閱 WMI 追蹤延伸模組 (Wmitrace.dll)

ACX 驅動程式偵錯

ACX 驅動程式是 WDF 驅動程式,因此 WDF 驅動程式所述的偵錯技術適用于 ACX 驅動程式。 如需偵錯 WDF 驅動程式的詳細資訊,請參閱下列主題。

偵錯工具的一般資訊

Windows (WinDbg、KD、CDB、NTSD) 的偵錯工具

KMDF 偵錯

影片逐步解說

ACX 核心偵錯工具擴充程式庫 (AcxKd.dll)

為了協助偵錯,ACX 具有隨附的核心偵錯工具擴充程式庫 (AcxKd.dll) 。 此程式庫可協助開發人員追蹤單一和多堆疊音訊路徑的問題。 kd 延伸模組可讓開發人員查看 ACX 結構。

注意

此偵錯工具延伸模組正在開發中,而且當它可供使用時,將會在這裡提供資訊。

驅動程式驗證器

建議對所有 Windows 驅動程式使用驅動程式驗證程式,包括 ACX 驅動程式。 使用驅動程式驗證器來顯示潛在錯誤、降低耗電量並增加驅動程式的可靠性。 如需詳細資訊,請參閱 驅動程式驗證器

ACX 多堆疊驅動程式標準化跨通訊

音訊路徑通常會經歷由不同驅動程式堆疊處理的多個硬體元件,以建立完整的音訊體驗。 系統通常會讓不同音訊技術廠商實作的 DSP、CODEC 和 AMP 功能。

在沒有妥善定義標準的多堆疊架構中,每個廠商都會強制定義自己的專屬介面和通訊協定。 ACX 的目標是藉由取得這些堆疊之間的同步處理擁有權,並為驅動程式提供簡單的可重複使用模式,以協助開發多堆疊音訊驅動程式。

如需詳細資訊,請參閱 ACX 多堆疊跨驅動程式通訊

ACX 參考檔

下列 acx 標頭提供初步參考檔。

就像 WDF 驅動程式一樣,DEVICE 和 DRIVER 是用來初始化基底驅動程式。

針腳、串流和線路是用來路由音訊訊號。

資料格式是使用此標頭來控制。

acxelements 標頭可讓您存取特定的音訊系統元素,例如音量、靜音、尖峰和關鍵字識別器。

事件和要求允許通知。

物件包,可用來儲存和擷取組態資訊,並在 acxmisc 中定義。

ACX 管理員用於支援複合音訊端點。

另請參閱

ACX 物件的摘要

ACX 多堆疊跨驅動程式通訊

ACX 裝置列舉和電源管理