音訊資料區塊
[與此頁面相關聯的功能 「波波音訊」是舊版功能。 WASAPI和音訊圖形已取代它。 WASAPI和音訊圖形已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 WASAPI 和 音訊圖形 ,而不是 波波音訊。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
waveInAddBuffer和waveOutWrite函式需要應用程式佈建資料區塊,以傳遞至設備磁碟機以進行錄製或播放。 這兩個函式都使用 WAVEHDR 結構來描述其資料區塊。
使用其中一個函式將資料區塊傳遞至設備磁碟機之前,您必須配置資料區塊的記憶體,以及描述資料區塊的標頭結構。 您可以使用下列函式來準備和取消準備標頭。
函式 | 描述 |
---|---|
waveInPrepareHeader | 準備電壓音訊輸入資料區塊。 |
waveInUnprepareHeader | 清除電壓音訊輸入資料區塊上的準備。 |
waveOutPrepareHeader | 準備電壓音訊輸出資料區塊。 |
waveOutUnprepareHeader | 清除有關電壓音訊輸出資料區塊的準備。 |
將音訊資料區塊傳遞至設備磁碟機之前,您必須將它傳遞至 waveInPrepareHeader 或 waveOutPrepareHeader來準備資料區塊。 當設備磁碟機完成資料區塊並傳回它時,您必須將資料區塊傳遞至 waveInUnprepareHeader 或 waveOutUnprepareHeader ,才能釋放任何配置的記憶體,以清除此準備。
除非電壓音訊輸入和輸出資料夠小,足以包含在單一資料區塊中,否則應用程式必須持續提供設備磁碟機資料區塊,直到播放或錄製完成為止。
即使使用單一資料區塊,應用程式也必須能夠判斷設備磁碟機何時完成資料區塊,讓應用程式可以釋放與資料區塊和標頭結構相關聯的記憶體。 有數種方式可以判斷設備磁碟機何時完成資料區塊:
- 藉由指定回呼函式來接收驅動程式在資料區塊完成時所傳送的訊息
- 使用事件回呼
- 藉由指定視窗或執行緒,以在驅動程式完成資料區塊時接收訊息
- 藉由輪詢與每個資料區塊一起傳送之WAVEHDR結構的dwFlags成員中的WHDR_DONE位
如果應用程式在需要時未取得設備磁碟機的資料區塊,則播放或遺失內送記錄資訊時可能會有可聽見的差距。 這至少需要雙緩衝配置—至少在設備磁碟機之前保持一個資料區塊。
下列主題說明如何判斷設備磁碟機何時完成資料區塊:
使用回呼函式來處理驅動程式訊息