Поделиться через


Интерфейс 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