Интерфейс ISpatialAudioClient2 (spatialaudioclient.h)
Интерфейс ISpatialAudioClient2 наследуется от ISpatialAudioClient и добавляет методы в запрос для поддержки разгрузки больших звуковых буферов.
Наследование
Интерфейс ISpatialAudioClient2 наследуется от интерфейса ISpatialAudioClient.
Методы
Интерфейс ISpatialAudioClient2 содержит следующие методы.
ISpatialAudioClient2::GetMaxFrameCountForCategory Возвращает максимальное поддерживаемое число кадров для каждого прохода обработки. |
ISpatialAudioClient2::IsOffloadCapable Запрашивает, поддерживает ли конечная точка отрисовки звука, в которую был создан ISpatialAudioClient2, обработку звука с аппаратной разгрузкой. |
Комментарии
Разгрузка звука позволяет приложению отправлять большой звуковой буфер (обычно от 1 до 2 секунд) в драйвер звукового устройства. Без разгрузки обычный звуковой буфер содержит только 10 мс данных, что требует, чтобы приложение было пробуждаемо около 100 раз в секунду для предоставления дополнительных звуковых данных. Использование разгруженных больших буферов может обеспечить экономию заряда батареи, особенно в случае, когда пользователь прослушивает звук с выключенным экраном.
Чтобы использовать эту функцию, драйвер звукового устройства должен поддерживать разгрузку. Запрос поддержки путем вызова IsOffloadCapable. Определите максимальное количество аудиокадров, поддерживаемых для разгрузки, вызвав Метод GetMaxFrameCountForCategory.
ISpatialAudioClient2 появился в Windows 11 (сборка Windows 22000), поэтому код должен обрабатывать ситуации, когда он выполняется в более старой версии Windows, которая не включает интерфейс . В следующем примере показано, как вызвать QueryInterface в ISpatialAudioClient , чтобы попытаться получить экземпляр 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);
}
Для приложений UWP, у которых нет доступа к IMMDevice, необходимо получить экземпляр ISpatialAudioClient , вызвав ActivateAudioInterfaceAsync. Пример см. в примере WindowsAudioSession.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Сборка Windows 22000 |
Верхняя часть | spatialaudioclient.h |