ISpatialAudioClient2 接口 (spatialaudioclient.h)
ISpatialAudioClient2 接口继承自 ISpatialAudioClient,并添加方法以查询卸载大型音频缓冲区的支持。
继承
ISpatialAudioClient2 接口继承自 ISpatialAudioClient 接口。
方法
ISpatialAudioClient2 接口具有这些方法。
ISpatialAudioClient2::GetMaxFrameCountForCategory 获取每个处理过程支持的最大帧计数。 |
ISpatialAudioClient2::IsOffloadCapable 查询创建 ISpatialAudioClient2 的音频呈现终结点是否支持硬件卸载的音频处理。 |
注解
音频卸载允许应用将大型音频缓冲区 (通常) 1 到 2 秒提交到音频设备驱动程序。 如果不卸载,典型的音频缓冲区仅包含 10 毫秒的数据,因此需要每秒唤醒应用大约 100 次以提供其他音频数据。 使用卸载的大型缓冲区可以节省电池电量,尤其是当用户在屏幕关闭的情况下收听音频的情况。
若要使用此功能,音频设备的驱动程序必须支持卸载。 通过调用 IsOffloadCapable 查询支持。 通过调用 GetMaxFrameCountForCategory 确定卸载支持的最大音频帧数。
ISpatialAudioClient2 是在 Windows 内部版本 22000) Windows 11 (中引入的,因此代码应处理它在不包含接口的较旧版本的 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 |