共用方式為


Wave 和 DirectSound 元件

應用程式程式依賴使用者模式和核心模式元件的組合,以擷取 (輸入) 並轉譯 (輸出) 波資料流程。 波串流是數位音訊資料流程,其資料格式是由 WAVEATEXWAVEATEXTENSIBLE 結構所描述。

應用程式可以使用下列其中一個軟體介面進行波浪轉譯和擷取:

  • Microsoft Windows Multimedia waveOutXxx 和 waveInXxx 函式

  • DirectSound 和 DirectSoundCapture API

waveOutXxx 和 waveInXxx 函式的行為是以舊版波浪驅動程式和裝置的功能為基礎。 從 Windows 98 開始, WDMAud 系統驅動程式 會將這些函式的呼叫轉譯成 WDM 音訊驅動程式的命令。 不過,藉由模擬舊版軟體和硬體的行為,waveOutXxx 功能會犧牲現在可透過 DirectSound API 取得的 3D 音效和硬體加速。 如需 DirectSound 和 Windows 多媒體波函數的詳細資訊,請參閱Microsoft Windows SDK檔。

DirectSound 和 Windows 多媒體波函式是 SysAudio 系統驅動程式的用戶端,它會建置處理波浪和 DirectSound 資料流程的音訊篩選圖形。 圖形建置對於使用這些軟體介面的應用程式而言是透明的。

Wave 元件

下圖顯示波應用程式用來轉譯或擷取由波 PCM 資料組成的數位音訊資料流程的使用者模式和核心模式元件。

說明用於波浪轉譯和擷取之使用者模式和核心模式元件的圖表。

轉譯元件會出現在上圖左側,而擷取元件會出現在右側。 代表波浪迷你埠驅動程式的方塊會變暗,表示這些是廠商提供的元件。 圖中的其他元件是系統提供的。

在圖的左上方,波浪轉譯 (或「波浪輸出」) 透過 waveOutXxx 函式實作的 WDM 音訊驅動程式,這些函式是在使用者模式 WinMM 系統元件中實作 Winmm.dll。 應用程式會從檔案讀取波浪音訊樣本區塊,並呼叫 waveOutWrite 函式來轉譯它們。

WDMAud 是由使用者模式和核心模式元件所組成, (Wdmaud.drv 和 Wdmaud.sys) ,會緩衝 來自 waveOutWrite 呼叫的波資料,並將波資料流程輸出至 KMixer 系統驅動程式,該驅動程式會出現在圖中的 WDMAud 下方。

KMixer 是一種系統元件,可接收來自一或多個來源的波浪 PCM 資料流程,並將它們混合在一起,以形成單一輸出資料流程,亦即波 PCM 格式。

KMixer 會將波流輸出至 WaveCyclic 或 WavePci 裝置,其埠和迷你埠驅動程式會出現在上圖左側的 KMixer 下方。 迷你埠驅動程式會將本身系結至埠驅動程式,以形成代表基礎音訊轉譯裝置的波浪篩選器。 一般轉譯裝置會輸出類比訊號,以驅動一組喇叭或外部音訊單位。 轉譯裝置也可以透過 S/PDIF 連接器輸出數位音訊。 如需 WaveCyclic 和 WavePci 的詳細資訊,請參閱 Wave Filters

或者,KMixer 可以將輸出資料流程傳遞至 USB 音訊裝置,該裝置是由 USBAudio 類別系統驅動程式 所控制, (圖中未顯示) ,而不是 WaveCyclic 或 WavePci 裝置。

配接器驅動程式會分別呼叫 GUID 值為CLSID_PortWaveCyclicCLSID_PortWavePciPcNewPort,以建立 WaveCyclic 或 WavePci 埠驅動程式的實例。

上圖右側顯示支援將波浪資料擷取至檔案的應用程式所需的元件。 波浪擷取 (或「wave-in」) 應用程式會透過 WinMM 系統元件中實作的 waveInXxx 函式與 WDM 音訊驅動程式通訊。

在圖的右下角,波浪擷取裝置是由波浪迷你埠和埠驅動程式所控制。 埠和迷你埠驅動程式可以是 WaveCyclic 或 WavePci 類型,會系結在一起,形成代表擷取裝置的波浪篩選器。 此裝置通常會從麥克風或其他音訊來源擷取類比訊號,並將它轉換成波浪 PCM 資料流程。 裝置也可以透過 S/PDIF 連接器輸入數位音訊資料流程。

波浪埠驅動程式會將其波浪資料流程輸出至 KMixer 或直接輸出至 WDMAud。 如果資料流程必須在 WDMAud 收到取樣速率之前傳遞 KMixer。 執行同時轉譯和擷取音訊資料流程的系統可能需要兩個 KMixer 實例,如圖所示。 請注意,SysAudio 會視需要自動建立這些實例。

或者,擷取的波資料流程來源可以是 USB 音訊裝置,而不是 WaveCyclic 或 WavePci 裝置。 在此情況下,USBAudio 驅動程式 (未顯示在圖中) 將資料流程傳遞至 KMixer。

不論波流是由 USB 裝置或 WaveCyclic 或 WavePci 裝置擷取,KMixer 都會視需要對資料流程執行取樣速率轉換,但不會與其他資料流程混合。 KMixer 會將產生的資料流程輸出至 Wdmaud.sys WDMAud 系統驅動程式的核心模式一半。 使用者模式的一半 Wdmaud.drv 會透過在 Winmm.dll 中實作的 waveInXxx 函式,將波資料流程輸出至應用程式程式。 最後,在圖形頂端,波浪擷取應用程式會將波浪資料寫入檔案。

在波浪擷取應用程式呼叫 waveInOpen 函式以開啟擷取資料流程時,它會傳入其回呼常式的指標。 發生波浪擷取事件時,作業系統會使用包含擷取裝置下一個波浪樣本區塊的緩衝區呼叫回呼常式。 為了回應回呼,應用程式會將下一個波浪資料區塊寫入檔案。

DirectSound 元件

下圖顯示 DirectSound 應用程式程式用來轉譯或擷取波資料的使用者模式和核心模式元件。

說明 DirectSound 轉譯和擷取之使用者模式和核心模式元件的圖表。

轉譯元件會顯示在上圖的左半部,而擷取元件會出現在右側。 波浪迷你埠驅動程式會顯示為深色方塊,以指出它們是廠商提供的元件。 圖中的其他元件是系統提供的。

在圖的左上方,DirectSound 應用程式會將波浪資料從檔案載入至使用者模式 DirectSound 系統元件 (Dsound.dll) 管理的音效緩衝區。 此元件會將波流傳送至 WaveCyclic 或 WavePci 裝置,其埠和迷你埠驅動程式會出現在圖的左下角。 如果裝置上有硬體混音器針腳可用,則資料流程會直接傳遞至波浪埠驅動程式,並略過 KMixer。 否則,資料流程會先通過 KMixer,這會與任何其他同時播放資料流程混合。 KMixer 會將混合資料流程輸出至埠驅動程式。

如同先前一樣,迷你埠驅動程式會將本身系結至埠驅動程式,以形成代表基礎音訊轉譯裝置的波浪篩選器。 例如,此裝置可能會透過一組喇叭播放串流。

或者,USB 音訊裝置可以轉譯波串流,而不是 WaveCyclic 或 WavePci 裝置。 在此情況下,資料流程無法略過 KMixer;USBAudio 類別系統驅動程式 (圖中未顯示,) 一律會將資料流程傳遞至 KMixer。

上圖右側顯示支援 DirectSoundCapture 應用程式的元件。 應用程式會記錄從 WaveCyclic 或 WavePci 擷取裝置接收的波資料。 此裝置會將類比訊號從麥克風轉換成波流。 裝置的波浪埠和迷你埠驅動程式會出現在圖的右下角。 如圖所示,埠驅動程式會接收作為迷你埠驅動程式的資料流程輸入,並直接輸出至使用者模式 DirectSound 元件、Dsound.dll,或透過 KMixer 間接輸出。 這取決於硬體擷取針腳是否可從擷取裝置取得。

或者,擷取的波流來源可以是 USB 音訊裝置。 在此情況下,資料流程無法略過 KMixer;USBAudio 驅動程式 (圖中未顯示,) 一律會將資料流程傳遞至 KMixer。

如果 KMixer 插入到擷取資料流程的路徑,則會視需要對資料流程執行取樣速率轉換,但不會與其他資料流程混合。

在上圖右上角,應用程式會從 DirectSoundCapture 緩衝區讀取波資料,並將它寫入檔案。