ISpatialAudioClient2 介面 (spatialaudioclient.h)
ISpatialAudioClient2 介面繼承自 ISpatialAudioClient,並新增方法來查詢支援卸除大型音訊緩衝區。
繼承
ISpatialAudioClient2 介面繼承自 ISpatialAudioClient 介面。
方法
ISpatialAudioClient2 介面具有這些方法。
ISpatialAudioClient2::GetMaxFrameCountForCategory 取得每個處理階段支持的畫面計數上限。 |
ISpatialAudioClient2::IsOffloadCapable 查詢 ISpatialAudioClient2 在 上建立的音訊轉譯端點是否支援硬體卸除的音訊處理。 |
備註
音訊卸除可讓應用程式將大型音訊緩衝區提交 (通常為 1 到 2 秒,) 至音訊設備驅動器。 若沒有卸除,一般音訊緩衝區只會包含 10 毫秒的數據,要求應用程式每秒喚醒大約 100 次,以提供額外的音訊數據。 使用卸除的大型緩衝區可提供省電,特別是針對使用者正在接聽螢幕關閉的音訊案例。
若要使用此功能,音訊裝置的驅動程式必須支援卸除。 呼叫 IsOffloadCapable 以查詢支援。 呼叫 GetMaxFrameCountForCategory 來判斷支援卸除的音訊畫面數上限。
ISpatialAudioClient2 是在 Windows 11 (windows Build 22000) 中引進的,因此您的程式代碼應該處理它在不包含介面的舊版 Windows 上執行的情況。 下列範例說明如何在 ISpatialAudioClient 上呼叫 QueryInterface 來嘗試取得 ISpatialAudioClient2 的實例,並在呼叫其方法之前檢查所擷取的介面不是 Null。
HRESULT hr;
Microsoft::WRL::ComPtr<IMMDeviceEnumerator> deviceEnum;
Microsoft::WRL::ComPtr<IMMDevice> defaultDevice;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnum);
hr = deviceEnum->GetDefaultAudioEndpoint(EDataFlow::eRender, eMultimedia, &defaultDevice);
Microsoft::WRL::ComPtr<ISpatialAudioClient> spatialAudioClient;
hr = defaultDevice->Activate(__uuidof(ISpatialAudioClient), CLSCTX_INPROC_SERVER, nullptr, (void**)&spatialAudioClient);
Microsoft::WRL::ComPtr<ISpatialAudioClient2> spatialAudioClient2;
hr = spatialAudioClient->QueryInterface(__uuidof(ISpatialAudioClient2), (void**)&spatialAudioClient2);
if (spatialAudioClient2 != nullptr)
{
BOOL offloadCapable = false;
// AudioCategory_Media is just for example purposes.
// Specify the same audio category that you intend specify in the call toISpatialAudioClient::ActivateSpatialAudioStream
hr = spatialAudioClient2->IsOffloadCapable(AudioCategory_Media, &offloadCapable);
}
對於無法存取 IMMDevice 的 UWP 應用程式,您應該藉由呼叫 ActivateAudioInterfaceAsync 來取得 ISpatialAudioClient 的實例。 如需範例,請參閱 WindowsAudioSession 範例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 組建 22000 |
標頭 | spatialaudioclient.h |