共用方式為


瞭解 WaveRT 埠驅動程式

WaveRT 埠驅動程式結合了先前 WaveCyclic 埠驅動程式的簡單性與 WavePci 埠驅動程式的硬體加速效能。

WaveRT 埠驅動程式藉由提供其主要用戶端 (,通常音訊引擎) 直接存取資料緩衝區,來消除持續對應和複製音訊資料的需求。 此直接存取也不需要驅動程式操作音訊資料流程中的資料。 因此,WaveRT 埠驅動程式可配合某些音訊裝置擁有的直接記憶體存取 (DMA) 控制器的需求。

為了區別自己與其他波浪轉譯和波浪擷取裝置,WaveRT 埠驅動程式除了KSCATEGORY_AUDIO、KSCATEGORY_RENDERKSCATEGORY_CAPTURE之外,還會在KSCATEGORY_REALTIME下註冊自己。 此自我註冊會在安裝配接器驅動程式期間發生。

在 Windows Vista 和更新版本的作業系統中,當作業系統啟動時並初始化音訊引擎時,音訊引擎會列舉代表音訊裝置的 KS 篩選器。 在列舉期間,音訊引擎會具現化其找到之音訊裝置的驅動程式。 此程式會導致建立這些裝置的篩選物件。 針對 WaveRT 音訊裝置,產生的篩選物件具有下列元件:

  • WaveRT 埠驅動程式的實例,可管理篩選準則的一般系統函式

  • WaveRT 迷你埠驅動程式的實例,可處理篩選的所有硬體特定功能

建立篩選物件之後,音訊引擎和 WaveRT 迷你埠驅動程式便準備好開啟音訊資料流程,以處理所需的音訊類型。 若要為音訊轉譯準備 KS 篩選器, (播放) ,例如,音訊引擎和 WaveRT 迷你埠驅動程式會執行下列動作來開啟播放資料流程:

  1. 音訊引擎會在 KS 篩選器上開啟釘選,而 WaveRT 迷你埠驅動程式會建立釘選的實例。 當音訊引擎開啟釘選時,它也會將資料流程的波浪格式傳遞至驅動程式。 驅動程式會使用波浪格式資訊,在下一個步驟中選取適當的緩衝區大小。

  2. 音訊引擎會將要求傳送至迷你埠驅動程式,以便建立特定大小的迴圈緩衝區。 迴圈緩衝區一詞是指當緩衝區位置暫存器到達播放或記錄作業中緩衝區結尾時,位置暫存器可以自動包裝到緩衝區的開頭。 不同于設定連續實體記憶體區塊的 WaveCyclic 迷你埠驅動程式,WaveRT 迷你埠驅動程式不需要在實體記憶體中連續的緩衝區。 驅動程式會使用 KSPROPERTY_RTAUDIO_BUFFER 屬性來配置緩衝區的空間。 如果音訊裝置的硬體無法從要求大小的緩衝區進行串流處理,驅動程式會在音訊裝置的資源限制內運作,以建立大小最接近原始要求大小的緩衝區。 然後,驅動程式會將緩衝區對應至音訊裝置的 DMA 引擎,並讓緩衝區可供使用者模式中的音訊引擎存取。

  3. 音訊引擎會排程執行緒,定期將音訊資料寫入迴圈緩衝區。

  4. 如果音訊裝置的硬體未提供迴圈緩衝區的直接支援,迷你埠驅動程式會定期重新建構音訊裝置,以繼續使用相同的緩衝區。 例如,如果硬體不支援緩衝區迴圈,驅動程式必須在每次到達緩衝區結尾時,將 DMA 位址設定回緩衝區的開頭。 此更新可以在插斷服務常式 (ISR) 或高優先順序執行緒中完成。

產生的設定會在支援迴圈緩衝區的音訊裝置硬體上提供問題復原的音訊訊號,或與迷你埠驅動程式搭配運作,以定期更新其硬體。

若要準備音訊擷取的 KS 篩選 (錄製) ,音訊引擎和 WaveRT 迷你埠驅動程式會使用類似的步驟來開啟記錄資料流程。

WaveRT 埠驅動程式所提供的其中一項效能改進,就是在波轉譯或波浪擷取期間,音訊資料流程的端對端處理延遲減少。 此延遲稱為資料流程延遲。

如需這兩種資料流程延遲類型的詳細資訊,請參閱下列主題。

如需如何開發支援 WaveRT 埠驅動程式的 WaveRT 迷你埠驅動程式的詳細資訊,請參閱 開發 WaveRT 迷你埠驅動程式 主題。