Partager via


Interface ISpatialAudioClient2 (spatialaudioclient.h)

L’interface ISpatialAudioClient2 hérite d’ISpatialAudioClient et ajoute des méthodes à la requête pour la prise en charge du déchargement des mémoires tampons audio volumineuses.

Héritage

L’interface ISpatialAudioClient2 hérite de l’interface ISpatialAudioClient.

Méthodes

L’interface ISpatialAudioClient2 possède ces méthodes.

 
ISpatialAudioClient2 ::GetMaxFrameCountForCategory

Obtient le nombre maximal d’images prises en charge par passe de traitement.
ISpatialAudioClient2 ::IsOffloadCapable

Demande si le point de terminaison de rendu audio sur lequel ISpatialAudioClient2 a été créé prend en charge le traitement audio déchargé du matériel.

Remarques

Le déchargement audio permet à une application d’envoyer une mémoire tampon audio volumineuse (généralement 1 à 2 secondes) au pilote de périphérique audio. Sans déchargement, une mémoire tampon audio classique ne contient que 10 ms de données, ce qui nécessite que l’application soit réveillée environ 100 fois par seconde pour fournir des données audio supplémentaires. L’utilisation de mémoires tampons volumineuses déchargées peut permettre d’économiser la batterie, en particulier pour le scénario où l’utilisateur écoute l’audio avec l’écran éteint.

Pour utiliser cette fonctionnalité, le pilote du périphérique audio doit prendre en charge le déchargement. Recherchez la prise en charge en appelant IsOffloadCapable. Déterminez le nombre maximal d’images audio prises en charge pour le déchargement en appelant GetMaxFrameCountForCategory.

ISpatialAudioClient2 a été introduit dans Windows 11 (Windows Build 22000), de sorte que votre code doit gérer le cas où il s’exécute sur une version antérieure de Windows qui n’inclut pas l’interface. L’exemple suivant illustre l’utilisation de l’appel de QueryInterface sur ISpatialAudioClient pour essayer d’obtenir une instance d’ISpatialAudioClient2 et vérifier que l’interface récupérée n’est pas null avant d’appeler ses méthodes.

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

Pour les applications UWP qui n’ont pas accès à IMMDevice, vous devez obtenir une instance d’ISpatialAudioClient en appelant ActivateAudioInterfaceAsync. Pour obtenir un exemple, consultez l’exemple WindowsAudioSession.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Build 22000
En-tête spatialaudioclient.h