適用於音訊的通用 Windows 驅動程式

在 Windows 10 中,您可以撰寫可跨許多硬體類型運作的通用音訊驅動程式。 本主題討論此方法的優點,以及平臺之間的差異。 除了適用於音訊的通用 Windows 驅動程式之外,Windows 還繼續支援先前的音訊驅動程序技術,例如 WDM。

開始使用適用於音訊的通用 Windows 驅動程式

IHV 可以開發適用於所有裝置的通用 Windows 驅動程式(桌面電腦、膝上型電腦、平板電腦、手機)。 這可以降低初始開發與更新程式代碼維護的開發時間和成本。

這些工具可用來開發通用 Windows 驅動程式:

  • Visual Studio 2015:將 “Target Platform” 設定為 “Universal”。 如需設定驅動程式開發環境的詳細資訊,請參閱 Windows 硬體開發人員檔和使用 WDK 建置驅動程式。

  • APIValidator 工具:您可以使用 ApiValidator.exe 工具來驗證驅動程式呼叫的 API 是否適用於通用 Windows 驅動程式。 此工具是適用於 Windows 10 的 Windows 驅動程式套件 (WDK) 的一部分,如果您使用 Visual Studio 2015,則會自動執行。 如需詳細資訊,請參閱 APIValidator

  • DDI 參考檔:DDI 參考檔已更新,指出通用 Windows 驅動程序支援哪些 DDI。 如需詳細資訊,請參閱 音訊裝置參考

建立通用音訊驅動程式

如需逐步指引,請參閱 Windows 硬體開發人員檔和使用 WDK 建置驅動程式。 以下是步驟的摘要:

  1. 載入通用音訊 sysvad 範例,以作為通用音訊驅動程式的起點。 或者,請從空的 WDM 驅動程式範本開始,並視音訊驅動程式需要從通用 sysvad 範例新增程式代碼。

  2. 在項目屬性中,將 [目標平臺] 設定為 [通用]。

  3. 建立安裝套件:如果您的目標是執行 Windows 10 傳統型版本的裝置(家用版、專業版、企業版和教育版),請使用通用 INF 檔案。 如果您的目標是執行 Windows 10 行動裝置版 的裝置,請使用 PkgGen 來產生 .spkg 檔案。

  4. 建置、安裝、部署及偵錯 Windows 10 傳統型版本或 Windows 10 行動裝置版 的驅動程式。

範例程式碼

Sysvad 和 SwapAPO 已轉換為通用 Windows 驅動程式範例。 如需詳細資訊,請參閱 音訊驅動程式範例。

適用於音訊通用 Windows 驅動程式的可用程式設計介面

從 Windows 10 開始,驅動程式程式設計介面是 Windows OneCoreUAP 型版本的一部分。 您可以使用該通用集合來撰寫通用 Windows 驅動程式。 這些驅動程式會在 Windows 10 傳統型版本和其他 Windows 10 版本 Windows 10 行動裝置版 上執行。

使用通用音訊驅動程式時,可以使用下列 DIS。

將現有的音訊驅動程式轉換為通用 Windows 驅動程式

請遵循此程式,將現有的音訊驅動程式轉換為通用 Windows 驅動程式。

  1. 判斷現有的驅動程式呼叫是否會在 OneCoreUAP Windows 上執行。 檢查參考頁面的需求區段。 如需詳細資訊,請參閱 音訊裝置參考

  2. 將驅動程式重新編譯為通用 Windows 驅動程式。 在項目屬性中,將 [目標平臺] 設定為 [通用]。

  3. 使用ApiValidator.exe工具來確認驅動程式呼叫的 DIS 是否適用於通用 Windows 驅動程式。 此工具是適用於 Windows 10 的 Windows 驅動程式套件 (WDK) 的一部分,如果您使用 Visual Studio 2015,則會自動執行。 如需詳細資訊,請參閱 APIValidator

  4. 如果驅動程式呼叫不屬於 OneCoreUAP 的介面,編譯程式會報告錯誤。

  5. 以替代呼叫取代這些呼叫,或建立程式代碼因應措施,或撰寫新的驅動程式。

建立元件化音訊驅動程式安裝

概觀

若要建立更順暢且更可靠的安裝體驗,並改善支援元件服務,請將驅動程式安裝程式分成下列元件。

  • DSP (如果有)和編解碼器
  • APO
  • OEM 自定義專案

您可以選擇性地將個別的 INF 檔案用於 DSP 和編解碼器。

此圖表摘要說明元件化的音訊安裝。

使用 DSP 驅動程式、編解碼器和 APOs 進行元件化音訊堆疊的圖表。

使用不同的擴充功能 INF 檔案來自定義特定系統的每個基底驅動程式元件。 自定義專案包括微調參數和其他系統特定設定。 如需詳細資訊,請參閱 使用擴充功能 INF 檔案

擴展名 INF 檔案必須是通用 INF 檔案。 如需詳細資訊,請參閱 使用通用 INF 檔案

如需使用 INF 檔案新增軟體的詳細資訊,請參閱 使用元件 INF 檔案DCH 設計原則和最佳做法

提交元件化 INF 檔案

APO INF 套件必須與基底驅動程式套件分開提交至合作夥伴中心。 如需建立套件的詳細資訊,請參閱 Windows HLK 用戶入門

SYSVAD 元件化 INF 檔案

若要查看元件化 INF 檔案的範例,請檢查 GitHub 上的 sysvad/TabletAudioSample

檔案名稱 描述
ComponentizedAudioSample.inf 基底元件化範例音訊 INF 檔案。
ComponentizedAudioSampleExtension.inf 具有其他 OEM 自定義功能的 sysvad 基底擴充驅動程式。
ComponentizedApoSample.inf APO 範例擴充功能 INF 檔案。

SYSVAD 範例中會繼續提供傳統的 INF 檔案。

檔案名稱 描述
tabletaudiosample.inf 桌面整合型 INF 檔案,其中包含安裝驅動程式所需的所有資訊。

APO 廠商特定的微調參數和功能設定

所有 APO 廠商系統特定設定、參數和微調值都必須透過擴充功能 INF 套件安裝。 在許多情況下,這可以使用 INF AddReg 指示詞以簡單方式執行。 在更複雜的情況下,可以使用微調檔案。 

基底驅動程式套件不得依賴這些自定義專案才能運作(雖然當然可以減少功能)。 

UWP 音訊設定APP

若要實作使用者 UI,請使用硬體支援應用程式 (HSA) 作為 Windows 通用音訊驅動程式。 如需詳細資訊,請參閱 硬體支援應用程式 (HSA):驅動程式開發人員的步驟。

以程式設計方式啟動UWP硬體支援應用程式

若要根據驅動程式事件以程式設計方式啟動 UWP 硬體支援應用程式(例如,當新的音訊裝置連線時),請使用 Windows Shell API。 Windows 10 Shell API 支援根據資源啟用或直接透過 IApplicationActivationManager 啟動 UWP UI 的方法。 您可以在自動啟動 Windows 10 UWP app 中找到更多關於自動啟動 UWP 應用程式的詳細數據。 

APO 和設備驅動器廠商使用 AudioModules API

音訊模組 API/DDI 的設計目的是將 UWP 應用程式或使用者模式服務之間傳遞至核心驅動程式模組或 DSP 處理區塊之間的命令標準化通訊傳輸(但不是通訊協定)。 音訊模組需要實作正確的 DDI 驅動程式,以支援模組列舉和通訊。 命令會以二進位形式傳遞,解譯/定義會留給建立者。 

音訊模組目前並非設計來促進UWP應用程式與在音訊引擎中執行的SW APO之間的直接通訊。

如需音訊模組的詳細資訊,請參閱 實作音訊模組通訊設定及查詢音訊裝置模組

APO HWID 字串建構

APO 硬體識別碼同時包含標準資訊和廠商定義的字串。

其建構方式如下:

SWC\VEN_v(4)&AID_a(4)&SUBSYS_ n(4)s(4) &REV_r(4)
SWC\VEN_v(4)&AID_a(4)&SUBSYS_ n(4)s(4)
SWC\VEN_v(4)&AID_a(4)

其中:

  • v(4) 是 APO 裝置廠商的 4 個字元識別碼。 這會由Microsoft管理。 
  • a(4) 是 APO 廠商所定義的 APO 4 個字元識別碼。 
  • n(4) 是父裝置子系統廠商的 4 個字元 PCI SIG 指派標識碼。 這通常是 OEM 識別碼。
  • s(4) 是父裝置的 4 個字元廠商定義子系統識別碼。 這通常是 OEM 產品識別碼。

隨插即用 驅動程式更新的 INF 版本和日期評估

Windows 隨插即用 系統會評估日期和驅動程式版本,以判斷有多個驅動程式存在時要安裝的磁碟驅動器。 如需詳細資訊,請參閱 Windows 排名驅動程式的方式。

若要允許使用最新的驅動程式,請確定並更新每個新版驅動程式的日期和時間版本。

APO 驅動程式登錄機碼

針對第三方定義的音訊驅動程式/APO 登錄機碼,請使用 HKR。

使用 Windows 服務促進 UWP <-> APO 通訊

管理像是 APO 等使用者模式元件時,不需要 Windows 服務。 不過,如果您的設計包含 RPC 伺服器來促進 UWP <-> APO 通訊,建議您在 Windows 服務中實作該功能,以控制在音訊引擎中執行的 APO。 

建置適用於 Windows 10 Desktop 的 Sysvad 通用音訊範例

完成下列步驟來建置適用於 Windows 10 桌面的 sysvad 範例。

  1. 找出桌面 inf 檔案 (tabletaudiosample.inf),並將製造商名稱設定為值,例如 “Contoso”

  2. 在 方案總管 中,選取並按住 [或以滑鼠右鍵按兩下] 解決方案 'sysvad',然後選擇 [Configuration Manager]。 如果您要部署至 64 位版本的 Windows,請將目標平台設定為 x64。 請確定所有專案的組態和平台設定都相同。

  3. 在 sysvad 方案中建置所有專案。

  4. 從組建找出組建的輸出目錄。 例如,它可以位於如下的目錄中:

    C:\Program Files (x86)\Windows Kits\10\src\audio\sysvad\x64\Debug\package
    
  5. 將下列檔案複製到您要安裝 sysvad 驅動程式的系統:

檔案 說明
TabletAudioSample.sys 驅動程式檔案。
tabletaudiosample.inf 資訊 (INF) 檔案,其中包含安裝驅動程式所需的資訊。
sysvad.cat 目錄檔案。
SwapAPO.dll UI 管理 API 的範例驅動程式延伸模組。
KeywordDetectorAdapter.dll 範例關鍵詞偵測器。

安裝及測試驅動程式

請遵循下列步驟,在目標系統上使用 PnpUtil 安裝驅動程式。

  1. 開啟和系統管理員命令提示字元,並在您複製驅動程式檔案的目錄中輸入下列內容。

    pnputil -i -a tabletaudiosample.inf

  2. sysvad 驅動程式安裝應該會完成。 如果有任何錯誤,您可以檢查此檔案以取得其他資訊: %windir%\inf\setupapi.dev.log

  3. 在 [裝置管理員] 的 [檢視] 功能表上,依類型選擇 [裝置]。 在裝置樹狀目錄中,找出Microsoft虛擬音訊裝置 (WDM) - Sysvad 範例。 這通常位於音效、視訊和遊戲控制器節點之下。

  4. 在目標計算機上,開啟 [控制台],然後流覽至 [硬體與音效>管理] 音訊裝置。 在 [音效] 對話框中,選取標示為 Microsoft 虛擬音訊設備 (WDM) - Sysvad 範例的喇叭圖示,然後選取 [設定預設值],但不要選取 [確定]。 這會讓 [音效] 對話框保持開啟。

  5. 在目標計算機上找出 MP3 或其他音訊檔案,然後按兩下以播放它。 然後在 [音效] 對話框中,確認音量層級指標中有與 Microsoft 虛擬音訊裝置 (WDM) - Sysvad 範例驅動程式相關聯的活動。