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