Compartir a través de


Interfaz ISpatialAudioClient2 (spatialaudioclient.h)

La interfaz ISpatialAudioClient2 hereda de ISpatialAudioClient y agrega métodos para consultar la compatibilidad con la descarga de búferes de audio grandes.

Herencia

La interfaz ISpatialAudioClient2 hereda de la interfaz ISpatialAudioClient.

Métodos

La interfaz ISpatialAudioClient2 tiene estos métodos.

 
ISpatialAudioClient2::GetMaxFrameCountForCategory

Obtiene el número máximo de fotogramas admitidos por paso de procesamiento.
ISpatialAudioClient2::IsOffloadCapable

Consulta si el punto de conexión de representación de audio en el que se creó ISpatialAudioClient2 admite el procesamiento de audio descargado de hardware.

Comentarios

La descarga de audio permite a una aplicación enviar un búfer de audio grande (normalmente de 1 a 2 segundos) al controlador del dispositivo de audio. Sin descarga, un búfer de audio típico solo contiene 10 ms de datos, lo que requiere que la aplicación se despierte aproximadamente 100 veces por segundo para proporcionar datos de audio adicionales. El uso de búferes grandes descargados puede proporcionar ahorros de batería, especialmente para el escenario en el que el usuario escucha audio con la pantalla desactivada.

Para usar esta característica, el controlador para el dispositivo de audio debe admitir la descarga. Consulte la compatibilidad mediante una llamada a IsOffloadCapable. Determine el número máximo de fotogramas de audio admitidos para la descarga mediante una llamada a GetMaxFrameCountForCategory.

ISpatialAudioClient2 se introdujo en Windows 11 (Windows Build 22000), por lo que el código debe controlar el caso en el que se ejecuta en una versión anterior de Windows que no incluye la interfaz. En el ejemplo siguiente se muestra el uso de la llamada a QueryInterface en ISpatialAudioClient para intentar obtener una instancia de ISpatialAudioClient2 y comprobar que la interfaz recuperada no es nula antes de llamar a sus métodos.

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);
}

Para las aplicaciones para UWP que no tienen acceso a IMMDevice, debes obtener una instancia de ISpatialAudioClient mediante una llamada a ActivateAudioInterfaceAsync. Para obtener un ejemplo, vea el ejemplo WindowsAudioSession.

Requisitos

Requisito Value
Cliente mínimo compatible Compilación 22000 de Windows
Encabezado spatialaudioclient.h