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 |
---|---|
|
音訊端點裝置已解除叢集,或音訊硬體或相關聯的硬體資源已重新設定、停用、移除,否則無法使用。 |
|
Windows 音訊服務未執行。 |
|
參數 phnsDefaultDevicePeriod 和 phnsMinimumDevicePeriod 都是 NULL。 |
備註
用戶端可以在呼叫 IAudioClient::Initialize 方法之前呼叫這個方法。
phnsDefaultDevicePeriod 參數會指定共用模式數據流的預設排程週期。 phnsMinimumDevicePeriod 參數會指定獨佔模式數據流的最小排程週期。
至少兩個參數之一 phnsDefaultDevicePeriod 和 phnsMinimumDevicePeriod 必須是非 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 |