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