硬體卸載音訊處理允許在電腦主 CPU 之外執行主要音訊處理任務。
音訊處理可能非常耗費大量運算。 因此,在許多案例中,允許專用處理器處理處理工作,例如混合和套用效果,可能會有所幫助。
當您實作卸除音訊的驅動程式時,您會開發能夠處理卸除音訊數據流的驅動程式,以及向 Windows 音訊系統公開該能力。
本節中的下列主題討論驅動程式開發、應用程式的影響,以及您在為具有硬體音訊引擎以處理卸載音訊流的音訊配接器開發音訊驅動程式時應注意的其他問題。
卸除音訊 的 問題報告
如需分載 APO 的相關資訊,請參閱 硬體分載的 APO 效果
Hardware-Offloaded 音訊處理架構概觀
軟體音訊引擎
下圖顯示 Windows 軟體音訊引擎。
音訊串流會從 Windows 音訊會話 API (WASAPI) 層抵達軟體音訊引擎,並可能透過更高階的 API,例如 Media Foundation。 在軟體音訊引擎資料流程效果 (SFX) 中,可以在混合個別資料流程之前,以每個資料流程為基礎套用,然後透過任何可用的端點效果 (EFX) 傳遞,並傳送至轉譯硬體和喇叭。
硬體音訊引擎
硬體音訊引擎是在音訊介面卡中實作,而且大部分會反映軟體音訊引擎的功能。 雖然 Windows 支援硬體卸載的音訊處理,但指定音訊配接器的音訊驅動程式會負責使用下圖所示的拓撲來公開音訊硬體的基礎功能。
硬體音訊引擎必須接受單一主機程序流,以及最多 n 個卸載流。 這些卸載資料流會直接從應用程式層傳送,以在硬體中處理。 換句話說,分流的音訊串流不會經由軟體音訊引擎處理。 此圖顯示一種設計,可處理最多三條卸載的串流。 主機處理串流是軟體混音器的最終輸出,包含經由軟體音訊引擎處理的所有串流。 每個硬體音訊引擎也必須包含硬體混音器。
為了保持與軟體音訊引擎和 WASAPI 介面的一致性,硬體音訊引擎必須以回送資料流程的形式將最終音訊輸出資料流程提供回音訊堆疊。 這對於依賴聲學回應消除的應用程式和案例尤其重要,這需要了解最終輸出資料流程才能取消回應並防止回饋。
為了實作回送音訊流的路徑,音訊驅動程式會負責提供回送接腳。 如果資料編碼為 PCM 格式,此針腳會從最終音訊引擎輸出傳回音訊資料。 否則,將傳回混音後 (但預先編碼) 結果。 當音訊資料使用硬體 EFX 處理且編碼為非 PCM 格式時,會在硬體混音器之後,並在硬體音訊引擎中的 EFX 階段之前,直接取得回送串流。 如需代表硬體音訊引擎之 KS 篩選拓撲的相關資訊,請參閱 硬體卸載音訊驅動程式實作。
整合式音訊架構
下圖顯示硬體音訊引擎與 Windows 軟體音訊引擎搭配使用時所產生架構的概觀。
在音訊驅動程式已指出支援脫機音訊處理的情境中,初始化的前 n 個(在此案例中為三個)資料流程會直接從 WASAPI 層路由至硬體音訊引擎,略過軟體音訊引擎。 硬體音訊引擎支援的 n 之後的任何新音訊串流都會透過軟體音訊引擎路由傳送進行處理。 然後,從軟體音訊引擎生成的音訊流作為主機處理程序流被傳送至硬體音訊引擎。 主機進程資料流程會與前 n 個資料流程混合,套用 EFX 處理,然後將產生的資料流程傳送至揚聲器。
KS 篩選拓撲
在 Windows 8 和更新版本的作業系統中,已支援板載硬體音訊引擎來處理音訊串流。 當您開發這類音訊配接器時,相關聯的音訊驅動程序必須以特定方式將此事實公開給使用者模式音訊系統,讓音訊系統可以探索、使用並正確公開此適配卡及其驅動程式的功能。
為了讓音訊驅動程式能夠公開這些新音訊配接器的硬體功能,Windows 8 引進了驅動程式必須使用的 KS 篩選拓撲:
如上圖所示,KS 篩選拓撲代表透過硬體的資料路徑,也顯示這些路徑上可用的函式。 如果是可以處理分離音訊的音訊配接器,KS 篩選器上有下列輸入端和輸出端(稱為針腳):
一個主程序引腳。 這代表從軟體音訊引擎輸入到 KS 篩選器。
一個環回引腳。 這代表從硬體音訊引擎到 Windows 音訊會話 API (WASAPI) 層的輸出。
多個音訊卸載端子。 雖然圖中僅顯示此類型的一個引腳,但 IHV 可以自由地實作任意數量 n 的引腳。
實際上,使用者模式音訊系統中的服務是 AudioEndpointBuilder,負責促成音訊適配卡及其驅動程式的探索。 AudioEndpointBuilder 服務會監視 KSCATEGORY_AUDIO 類別的裝置介面抵達和移除。 當音訊裝置驅動程式註冊 KSCATEGORY_AUDIO 裝置介面類別的新實例時,會觸發裝置介面抵達通知。 AudioEndpointBuilder 服務會偵測裝置介面抵達通知,並使用演算法來檢查系統中音訊裝置的拓撲,以便採取適當的動作。
當您開發音訊驅動程式以支援能夠處理卸載音訊的配接器時,驅動程式必須使用 KSNODETYPE_AUDIO_ENGINE 音訊端點來公開硬體音訊引擎的功能。 如需音訊端點探索程式的詳細資訊,請參閱 音訊端點產生器演算法。
使用者介面考量事項
您開發了音訊驅動程式,以控制能夠處理卸載音訊之音訊介面卡的基礎硬體功能。 這表示您的驅動程式對如何控制配接器的功能有最深入的瞭解。 因此,您必須開發一個 UI,以終端使用者可以選取、啟用和/或停用的選項形式,向使用者公開配接器的功能。
不過,如果您已經有用來控制您開發的音訊處理物件 (APO) 的 UI,則可以擴充此 UI 以使用新的音訊配接器。 在此情況下,UI 的延伸模組會提供 API 的軟體控制,以及配接器的硬體控制。
應用影響
針對這種新型音訊配接器及其相關聯驅動程式所述的功能,可由 UWP 應用程式透過 WASAPI、Media Foundation、Media Engine 或 HTML 5 <音訊> 標籤使用。 請注意,無法使用 Wave 和 DSound,因為它們不適用於 UWP 應用程式。 另請注意,桌面應用程式無法利用支援硬體卸載音訊的音訊配接器的卸載功能。 這些應用程式仍然可以呈現音訊,但只能透過使用軟體音訊引擎的主機端子來實現。
如果 UWP 應用程式串流媒體內容,並使用 Media Foundation、媒體引擎或 HTML 5 <音訊> 標籤,只要已為串流設定適當的音訊類別,應用程式就會自動選擇加入硬體卸載。 啟用硬體卸載是針對每個數據流完成的。
使用 WASAPI 或串流通訊的 UWP 應用程式必須明確選擇加入硬體卸載。