IAudioClient::GetCurrentPadding 方法 (audioclient.h)
GetCurrentPadding 方法會擷取端點緩衝區中填補的畫面數。
語法
HRESULT GetCurrentPadding(
[out] UINT32 *pNumPaddingFrames
);
參數
[out] pNumPaddingFrames
UINT32 變數的指標,此方法會將畫面計數寫入其中 (緩衝區中填補的音訊畫面數) 。
傳回值
如果方法成功,它會傳回 S_OK。 如果失敗,可能的傳回碼包括但不限於下表所示的值。
傳回碼 | Description |
---|---|
|
音訊數據流尚未成功初始化。 |
|
音訊端點裝置已解除叢集,或音訊硬體或相關聯的硬體資源已重新設定、停用、移除或無法使用。 |
|
Windows 音訊服務未執行。 |
|
參數 pNumPaddingFrames 為 NULL。 |
備註
這個方法需要 IAudioClient 介面的先前初始化。 此方法的所有呼叫都會失敗,併發生錯誤AUDCLNT_E_NOT_INITIALIZED,直到用戶端成功呼叫 IAudioClient::Initialize 方法來初始化音頻數據流為止。
這個方法會擷取填補值,指出端點緩衝區目前包含的有效未讀取數據量。 轉譯應用程式可以使用填補值來判斷它可以安全地寫入端點緩衝區的新數據量,而不會覆寫音訊引擎尚未從緩衝區讀取的先前寫入數據。 擷取應用程式可以使用填補值來判斷它可以安全地從端點緩衝區讀取多少新數據,而不會從音訊引擎尚未寫入有效數據的緩衝區區域讀取無效的數據。
填補值會以數個音訊畫面表示。 音訊畫面的大小是由將用戶端傳遞至 IAudioClient::Initialize 方法的 (或顯示於其) 上的NBlockAlign 成員所指定。 音訊畫面的位元組大小等於數據流中的通道數目乘以每個通道的樣本大小。 例如,16 位樣本的立體 (2 通道) 數據流的框架大小為四個字節。
針對共用模式轉譯數據流, GetCurrentPadding 所報告的填補值會指定排入佇列以在端點緩衝區中播放的音訊畫面數。 寫入端點緩衝區之前,用戶端可以藉由從緩衝區長度減去填補值來計算緩衝區中的可用空間量。 為了確保 後續呼叫 IAudioRenderClient::GetBuffer 方法成功,客戶端應該要求未超過緩衝區中可用空間的封包長度。 若要取得緩衝區長度,請呼叫 IAudioClient::GetBufferSize 方法。
針對共用模式擷取數據流, GetCurrentPadding 所報告的填補值會指定端點緩衝區中下一個封包中可用的擷取數據框架數目。 在特定時刻,零、一或多個擷取數據的封包可能已準備好讓用戶端從緩衝區讀取。 如果目前沒有可用的封包,方法會報告 0 的填補值。 在 GetCurrentPadding 呼叫之後, IAudioCaptureClient::GetBuffer 方法呼叫會擷取封包,其長度完全符合 GetCurrentPadding 所報告的填補值。 每個 GetBuffer 呼叫都會擷取整個封包。 封包一律包含音訊框架的整數。
針對共用模式擷取數據流,呼叫 GetCurrentPadding 相當於呼叫 IAudioCaptureClient::GetNextPacketSize 方法。 也就是說, GetCurrentPadding 所報告的填補值等於 GetNextPacketSize 所報告的封包長度。
針對以 AUDCLNT_STREAMFLAGS_EVENTCALLBACK 旗標初始化的獨佔模式轉譯或擷取數據流,用戶端通常不會使用 GetCurrentPadding 所報告的填補值。 相反地,用戶端會在每次處理階段期間存取整個緩衝區。 每當緩衝區可供處理時,音訊引擎會透過發出用戶端事件句柄的訊號來通知用戶端。 如需此旗標的詳細資訊,請參閱 IAudioClient::Initialize。
若為未使用 AUDCLNT_STREAMFLAGS_EVENTCALLBACK 旗標初始化的獨佔模式轉譯或擷取數據流,用戶端可以使用從 GetCurrentPadding 取得的填補值,其方式類似於先前針對共用模式數據流所述。 詳細數據如下所示。
首先,針對獨佔模式轉譯數據流,填補值會指定排入佇列以在端點緩衝區中播放的音訊畫面數。 如同之前,用戶端可以從緩衝區長度減去填補值,以計算緩衝區中的可用空間量。
其次,針對獨佔模式擷取數據流, GetCurrentPadding 所報告的填補值會指定下一個封包的目前長度。 不過,這個填補值是封包長度的快照集,可能會在用戶端呼叫 IAudioCaptureClient::GetBuffer 方法之前增加。 因此,GetBuffer 所擷取的封包長度至少與大一樣大,但可能大於 GetCurrentPadding 呼叫之前 GetCurrentPadding 呼叫所報告的填補值。 相反地,針對共用模式擷取數據流,從 GetBuffer 取得的封包長度一律等於先前 GetCurrentPadding 呼叫所報告的填補值。
如需呼叫 GetCurrentPadding 方法的程式代碼範例,請參閱轉譯 Stream。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | audioclient.h |
另請參閱
IAudioCaptureClient::GetBuffer