IAudioCaptureClient::ReleaseBuffer 方法 (audioclient.h)

ReleaseBuffer 方法會釋放緩衝區。

語法

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesRead
);

參數

[in] NumFramesRead

用戶端從擷取緩衝區讀取的音訊畫面數。 此參數必須等於先前取得的數據封包或0中的畫面格數目。

傳回值

如果方法成功,它會傳回 S_OK。 如果失敗,可能的傳回碼包括但不限於下表所示的值。

傳回碼 Description
AUDCLNT_E_INVALID_SIZE
NumFramesRead 參數會設定為數據封包大小或 0 以外的值。
AUDCLNT_E_OUT_OF_ORDER
此呼叫之前未加上對應的 IAudioCaptureClient::GetBuffer 呼叫。
AUDCLNT_E_DEVICE_INVALIDATED
音訊端點裝置已解除叢集,或音訊硬體或相關聯的硬體資源已重新設定、停用、移除或無法使用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音訊服務未執行。

備註

用戶端在讀取先前透過呼叫 IAudioCaptureClient::GetBuffer 方法取得的數據封包時,應該呼叫這個方法。

用戶端從 GetBuffer 呼叫取得的封包中的數據保證會保持有效,直到用戶端呼叫 ReleaseBuffer 以釋放封包為止。

在每個 GetBuffer 呼叫與其對應的 ReleaseBuffer 呼叫之間,客戶端必須讀取整個數據封包,或沒有任何數據封包。 如果用戶端在 GetBuffer 呼叫之後讀取整個封包,則應該呼叫 ReleaseBuffer ,並將 NumFramesRead 設定為數據封包中的框架總數。 在此情況下,下一次呼叫 GetBuffer 將會產生新的數據封包。 如果用戶端在 呼叫 GetBuffer 之後,從封包讀取任何數據,則應該呼叫 ReleaseBuffer 並將 NumFramesRead 設為 0。 在此情況下,下一個 GetBuffer 呼叫會產生與先前 GetBuffer 呼叫相同的數據封包。

如果用戶端呼叫 ReleaseBuffer 並將 NumFramesRead 設定為封包大小或 0 以外的任何值,則呼叫會失敗並傳回錯誤碼AUDCLNT_E_INVALID_SIZE。

客戶端應該避免 GetBuffer 呼叫之間取得緩衝區和釋放緩衝區的 ReleaseBuffer 呼叫之間的過度延遲。 音訊引擎的實作假設 GetBuffer 呼叫和對應的 ReleaseBuffer 呼叫發生在相同的緩衝區處理期間內。 延遲釋放緩衝區超過一段時間的用戶端,可能會遺失範例數據。

如需呼叫 ReleaseBuffer 方法的程式代碼範例,請參閱擷取 Stream

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 audioclient.h

另請參閱

IAudioCaptureClient 介面

IAudioCaptureClient::GetBuffer