Gestion des flux

Après avoir énuméré les appareils de point de terminaison audio dans le système et identifié un appareil de rendu ou de capture approprié, la tâche suivante pour une application cliente audio consiste à ouvrir une connexion avec l’appareil de point de terminaison et à gérer le flux de données audio sur cette connexion. WASAPI permet aux clients de créer et de gérer des flux audio.

WASAPI implémente plusieurs interfaces pour fournir des services de gestion de flux aux clients audio. L’interface principale est IAudioClient. Un client obtient l’interface IAudioClient pour un appareil de point de terminaison audio en appelant la méthode IMMDevice::Activate (avec le paramètre iid défini sur REFIID IID_IAudioClient) sur l’objet de point de terminaison.

Le client appelle les méthodes de l’interface IAudioClient pour effectuer les opérations suivantes :

  • Découvrez les formats audio pris en charge par l’appareil de point de terminaison.
  • Obtenez la taille de la mémoire tampon du point de terminaison.
  • Obtenez le format et la latence du flux.
  • Démarrez, arrêtez et réinitialisez le flux qui transite par l’appareil de point de terminaison.
  • Accédez à des services audio supplémentaires.

Pour créer un flux, un client appelle la méthode IAudioClient::Initialize . Grâce à cette méthode, le client spécifie le format de données du flux, la taille de la mémoire tampon du point de terminaison et si le flux fonctionne en mode partagé ou exclusif.

Les méthodes restantes de l’interface IAudioClient se répartissent en deux groupes :

  • Méthodes qui peuvent être appelées uniquement après l’ouverture du flux par IAudioClient::Initialize.
  • Méthodes qui peuvent être appelées à tout moment avant ou après l’appel Initialize .

Les méthodes suivantes ne peuvent être appelées qu’après l’appel à IAudioClient::Initialize :

Les méthodes suivantes peuvent être appelées avant ou après l’appel IAudioClient::Initialize :

Pour accéder aux services clients audio supplémentaires, le client appelle la méthode IAudioClient::GetService . Grâce à cette méthode, le client peut obtenir des références aux interfaces suivantes :

  • IAudioRenderClient

    Écrit les données de rendu dans une mémoire tampon de point de terminaison de rendu audio.

  • IAudioCaptureClient

    Lit les données capturées à partir d’une mémoire tampon de point de terminaison de capture audio.

  • IAudioSessionControl

    Communique avec le gestionnaire de sessions audio pour configurer et gérer la session audio associée au flux.

  • ISimpleAudioVolume

    Contrôle le niveau de volume de la session audio associée au flux.

  • IChannelAudioVolume

    Contrôle les niveaux de volume des canaux individuels dans la session audio associée au flux.

  • IAudioClock

    Surveille le débit de données du flux et la position du flux.

En outre, les clients WASAPI qui nécessitent une notification des événements liés à la session doivent implémenter l’interface suivante :

Enfin, un client peut utiliser une API de niveau supérieur pour créer un flux audio, mais également avoir besoin d’accéder aux contrôles de session et aux contrôles de volume pour la session qui contient le flux. Une API de niveau supérieur ne fournit généralement pas cet accès. Le client peut obtenir les contrôles d’une session particulière via l’interface IAudioSessionManager . Cette interface permet au client d’obtenir les interfaces IAudioSessionControl et ISimpleAudioVolume pour une session sans que le client utilise l’interface IAudioClient pour créer un flux et affecter le flux à la session. Un client obtient l’interface IAudioSessionManager pour un appareil de point de terminaison audio en appelant la méthode IMMDevice::Activate (avec le paramètre iid défini sur REFIID IID_IAudioSessionManager) sur l’objet de point de terminaison.

Les interfaces IAudioSessionControl, IAudioSessionEvents et IAudioSessionManager sont définies dans le fichier d’en-tête Audiopolicy.h. Toutes les autres interfaces WASAPI sont définies dans le fichier d’en-tête Audioclient.h.

Les sections suivantes décrivent comment utiliser WASAPI pour gérer les flux audio :

Guide de programmation