Share via


IAudioClient::GetDevicePeriod 方法 (audioclient.h)

GetDevicePeriod 方法會擷取定期間隔的長度,以分隔端點緩衝區中數據上音訊引擎所傳遞的連續處理。

語法

HRESULT GetDevicePeriod(
  [out] REFERENCE_TIME *phnsDefaultDevicePeriod,
  [out] REFERENCE_TIME *phnsMinimumDevicePeriod
);

參數

[out] phnsDefaultDevicePeriod

REFERENCE_TIME 變數的 指標,此方法會寫入時間值,以指定音訊引擎所傳遞之定期處理之間的預設間隔。 時間是以 100 奈秒單位表示。 如需 REFERENCE_TIME的相關信息,請參閱 Windows SDK 檔。

[out] phnsMinimumDevicePeriod

REFERENCE_TIME 變數的 指標,方法會寫入時間值,以指定音訊端點裝置所傳遞之定期處理之間的最小間隔。 時間是以 100 奈秒單位表示。

傳回值

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

傳回碼 Description
AUDCLNT_E_DEVICE_INVALIDATED
音訊端點裝置已解除叢集,或音訊硬體或相關聯的硬體資源已重新設定、停用、移除,否則無法使用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音訊服務未執行。
E_POINTER
參數 phnsDefaultDevicePeriodphnsMinimumDevicePeriod 都是 NULL

備註

用戶端可以在呼叫 IAudioClient::Initialize 方法之前呼叫這個方法。

phnsDefaultDevicePeriod 參數會指定共用模式數據流的預設排程週期。 phnsMinimumDevicePeriod 參數會指定獨佔模式數據流的最小排程週期。

至少兩個參數之一 phnsDefaultDevicePeriodphnsMinimumDevicePeriod 必須是非 NULL ,否則方法會立即傳回錯誤碼E_POINTER。 如果這兩個參數都是非 NULL,則方法會同時輸出預設和最小期間。

針對共用模式數據流,音訊引擎會定期處理端點緩衝區中的數據,引擎會與用戶端應用程式共用。 引擎會排程本身定期執行這些處理。

音訊引擎處理傳遞之間的期間會針對特定音訊端點裝置固定,並代表音訊引擎的最小處理量子。 這個期間加上緩衝區和端點裝置之間的數據流延遲,代表音訊應用程式可以達到的最低可能延遲。

用戶端可以選擇排程其定期處理線程,以與音訊引擎相同的時間間隔執行。 如此一來,用戶端就可以達到共用模式數據流的最小可能延遲。 不過,在延遲較不重要的應用程式中,用戶端可以藉由排程其處理階段來減少 CPU 上的進程切換額外負荷,以較不常發生。 在此情況下,端點緩衝區必須按比例調整,以補償處理階段之間的較長期間。

用戶端會在呼叫 IAudioClient::Initialize 方法時判斷緩衝區大小。 針對共用模式數據流,如果客戶端傳遞此方法 hnsBufferDuration 參數值為 0,則方法會假設用戶端和音訊引擎的期間保證相等,而且方法會配置小到足以達到最小延遲的緩衝區。 (事實上,如果用戶端將 hnsBufferDuration 設定為 0 和音訊引擎期間和裝置 ) 延遲的總和,同樣地,如果用戶端將 hnsBufferDuration 設定為 0,則用戶端會假設用戶端的期間設定為音頻端點裝置的最小期間。同樣地,如果用戶端將 hnsBufferDuration 設定為 0,則方法會假設客戶端的期間設定為音訊端點裝置的最小期間。 和方法會配置夠小的緩衝區,以達到最低的可能延遲。

如果客戶端選擇較不常執行其定期處理線程,代價是增加延遲,只要在 IAudioClient::Initialize 呼叫期間建立端點緩衝區就足夠大即可。

規格需求

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

另請參閱

IAudioClient 介面

IAudioClient::Initialize