共用方式為


音訊數據區塊

[與此頁面相關聯的功能,電壓音訊,是舊版功能。 WASAPIAudio Graphs已取代它。 WASAPI音訊圖形 已針對 Windows 10 和 Windows 11 優化。 Microsoft強烈建議新程式代碼盡可能使用 WASAPIAudio Graphs,而不是 波波音頻。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

waveInAddBufferwaveOutWrite 函式需要應用程式配置數據區塊,以傳遞至設備驅動器以進行錄製或播放。 這兩個函式都使用 WAVEHDR 結構來描述其數據區塊。

使用其中一個函式將數據區塊傳遞至設備驅動器之前,您必須配置數據區塊的記憶體,以及描述數據區塊的標頭結構。 您可以使用下列函式來準備和取消準備標頭。

功能 描述
waveInPrepareHeader 準備超聲波音頻輸入數據區塊。
waveInUnprepareHeader 清除有關超聲波音頻輸入數據區塊的準備。
waveOutPrepareHeader 準備超聲波音頻輸出數據區塊。
waveOutUnprepareHeader 清除有關超聲波音頻輸出數據區塊的準備。

 

將音訊數據區塊傳遞至設備驅動器之前,您必須將音訊數據區塊傳遞至 waveInPrepareHeaderwaveOutPrepareHeader來準備數據區塊。 當設備驅動器完成數據區塊並傳回它時,您必須將數據區塊傳遞至 waveInUnprepareHeader,或 waveOutUnprepareHeader,才能釋放任何已配置的記憶體,以清除此準備。

除非超聲波音頻輸入和輸出數據足夠小,才能包含在單一數據區塊中,否則應用程式必須持續提供設備驅動器的數據區塊,直到播放或錄製完成為止。

即使使用單一數據區塊,應用程式也必須能夠判斷設備驅動器何時完成數據區塊,讓應用程式可以釋放與數據區塊和標頭結構相關聯的記憶體。 有數種方式可判斷設備驅動器何時完成數據區塊:

  • 指定回呼函式,以在驅動程式完成數據區塊時接收訊息
  • 使用事件回呼
  • 指定視窗或線程,以在驅動程式完成數據區塊時接收訊息
  • 藉由輪詢 dwFlags 中的WHDR_DONE位,WAVEHDR 結構的成員,每個數據區塊一起傳送

如果應用程式在需要時未取得設備驅動器的數據區塊,則播放或遺失內送記錄資訊時可能會有聽覺的間距。 這至少需要雙緩衝配置 — 至少在設備驅動器前面停留一個數據區塊。

下列主題描述如何判斷設備驅動器何時完成數據區塊:

使用回調函式來處理驅動程式訊息