共用方式為


IAudioRenderClient::ReleaseBuffer 方法 (audioclient.h)

ReleaseBuffer 方法會釋放先前呼叫 IAudioRenderClient::GetBuffer 方法中取得的緩衝區空間。

語法

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesWritten,
  [in] DWORD  dwFlags
);

參數

[in] NumFramesWritten

用戶端寫入數據封包的音訊畫面數。 此參數的值必須小於或等於數據封包的大小,如傳遞至 IAudioRenderClient::GetBuffer 方法的 NumFramesRequested 參數中所指定。

[in] dwFlags

緩衝區組態旗標。 呼叫端可以將此參數設定為 0 或下列_AUDCLNT_BUFFERFLAGS列舉值 (旗標位) :

AUDCLNT_BUFFERFLAGS_SILENT

如果設定此旗標位,音訊引擎會將數據封包視為包含無聲,而不論封包中包含的數據值為何。 此旗標不需要客戶端明確地將無聲數據寫入轉譯緩衝區。

傳回值

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

傳回碼 Description
AUDCLNT_E_INVALID_SIZE
NumFramesWritten 值超過先前 IAudioRenderClient::GetBuffer 呼叫中指定的 NumFramesRequested 值。
AUDCLNT_E_BUFFER_SIZE_ERROR
數據流是獨佔模式,並使用事件驅動緩衝,但客戶端嘗試釋放不是緩衝區大小的封包。
AUDCLNT_E_OUT_OF_ORDER
此呼叫前面沒有對應的 IAudioRenderClient::GetBuffer 呼叫。
AUDCLNT_E_DEVICE_INVALIDATED
音訊端點裝置已解除叢集,或音訊硬體或相關聯的硬體資源已重新設定、停用、移除或無法使用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音訊服務未執行。
E_INVALIDARG
參數 dwFlags 不是有效的值。

備註

客戶端必須釋放先前呼叫 IAudioRenderClient::GetBuffer 方法時所要求的相同畫面格數目。 此規則的單一例外狀況是用戶端一律可以呼叫 ReleaseBuffer 來釋放 0 個畫面格 (,除非數據流是獨佔模式,並使用事件驅動緩衝) 。

此行為提供方便的方式,讓用戶端「釋放」先前要求的封包長度為 0。 在此情況下, 對 ReleaseBuffer 的呼叫是選擇性的。 呼叫 GetBuffer 以取得長度為 0 的封包之後,用戶端可以選擇在再次呼叫 GetBuffer 之前未呼叫 ReleaseBuffer

此外,如果上述 GetBuffer 呼叫取得非零大小的封包,則呼叫 NumFramesRequested 設為 0 的 ReleaseBuffer 將會成功 (,除非數據流是獨佔模式,並使用事件驅動緩衝) 。 呼叫的意義是客戶端在釋放封包之前,不會將數據寫入封包。 因此,方法會將封包所表示的緩衝區部分視為未使用,並將下一個 GetBuffer 呼叫中的這個部分重新提供給用戶端使用。

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

如需呼叫 ReleaseBuffer 方法的程式代碼範例,請參閱下列主題:

規格需求

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

另請參閱

IAudioClient::Initialize

IAudioRenderClient 介面

IAudioRenderClient::GetBuffer