Partager via


Interface IAudioSessionEnumerator (audiopolicy.h)

L’interface IAudioSessionEnumerator énumère les sessions audio sur un périphérique audio. Pour obtenir une référence à l’interface IAudioSessionEnumerator de l’objet énumérateur de session, l’application doit appeler IAudioSessionManager2::GetSessionEnumerator.

Héritage

L’interface IAudioSessionEnumerator hérite de l’interface IUnknown. IAudioSessionEnumerator a également les types de membres suivants :

Méthodes

L’interface IAudioSessionEnumerator a ces méthodes.

 
IAudioSessionEnumerator::GetCount

La méthode GetCount obtient le nombre total de sessions audio ouvertes sur le périphérique audio.
IAudioSessionEnumerator::GetSession

La méthode GetSession obtient la session audio spécifiée par un numéro de session audio.

Remarques

Si une application souhaite être avertie de la création de nouvelles sessions, elle doit inscrire son implémentation de IAudioSessionNotification auprès du gestionnaire de sessions. Une fois l’inscription réussie, le gestionnaire de session envoie des notifications de création de session à l’application sous forme de rappels. Ces notifications contiennent une référence au pointeur IAudioSessionControl de la session nouvellement créée.

L’énumérateur de session conserve une liste des sessions en cours en conservant des références au pointeur IAudioSessionControl de chaque session. Toutefois, l’énumérateur de session peut ne pas connaître les nouvelles sessions signalées via IAudioSessionNotification. Dans ce cas, l’application n’aurait accès qu’à une liste partielle de sessions. Cela peut se produire si le pointeur IAudioSessionControl (dans le rappel) est libéré avant l’initialisation de l’énumérateur de session. Par conséquent, si une application souhaite un ensemble complet de sessions pour le point de terminaison audio, l’application doit conserver sa propre liste.

L’application doit effectuer les étapes suivantes pour recevoir des notifications de session et gérer une liste des sessions actuelles.

  1. Initialisez COM avec le modèle MTA (Multithreaded Apartment) en appelant CoInitializeEx(NULL, COINIT_MULTITHREADED) dans un thread autre que l’interface utilisateur. Si MTA n’est pas initialisé, l’application ne reçoit pas de notifications de session de la part du gestionnaire de session.
    Note Les threads qui exécutent l’interface utilisateur d’une application doivent être initialisés avec le modèle de thread d’appartement.
     
  2. Activez une interface IAudioSessionManager2 à partir de l’appareil de point de terminaison audio. Appelez IMMDevice::Activate avec le paramètre iid défini sur IID_IAudioSessionManager2. Cet appel reçoit une référence à l’interface IAudioSessionManager2 du gestionnaire de sessions dans le paramètre ppInterface .
  3. Implémentez l’interface IAudioSessionNotification pour fournir le comportement de rappel.
  4. Appelez IAudioSessionManager2::RegisterSessionNotification pour inscrire l’implémentation de L’application de IAudioSessionNotification.
  5. Créez et initialisez l’objet énumérateur de session en appelant IAudioSessionManager2::GetSessionEnumerator. Cette méthode génère une liste des sessions actuelles disponibles pour le point de terminaison et ajoute les pointeurs IAudioSessionControl pour chaque session de la liste, s’ils ne sont pas déjà présents.
  6. Utilisez l’interface IAudioSessionEnumerator retournée à l’étape précédente pour récupérer et énumérer la liste des sessions. Le contrôle de session pour chaque session peut être récupéré en appelant IAudioSessionEnumerator::GetSession. Veillez à appeler AddRef pour chaque contrôle de session afin de conserver le nombre de références.
  7. Lorsque l’application reçoit une notification de création de session, ajoutez le pointeur IAudioSessionControl de la nouvelle session (reçue dans IAudioSessionNotification::OnSessionCreated) à la liste des sessions existantes.
Étant donné que l’application gère cette liste de sessions et gère la durée de vie de la session en fonction des exigences de l’application, aucun mécanisme d’expiration n’est appliqué par le système audio sur les objets de contrôle de session.

Un contrôle de session est valide tant que l’application a une référence au contrôle de session dans la liste.

Exemples

L’exemple de code suivant montre comment créer l’objet énumérateur de session, puis énumérer les sessions.

HRESULT EnumSessions(IAudioSessionManager2* pSessionManager)
{
    if (!pSessionManager)
    {
        return E_INVALIDARG;
    }

    HRESULT hr = S_OK;
    
    int cbSessionCount = 0;
    LPWSTR pswSession = NULL;
    
    IAudioSessionEnumerator* pSessionList = NULL;
    IAudioSessionControl* pSessionControl = NULL;
    
    // Get the current list of sessions.
    CHECK_HR( hr = pSessionManager->GetSessionEnumerator(&pSessionList));
    
    // Get the session count.
    CHECK_HR( hr = pSessionList->GetCount(&cbSessionCount));

    for (int index = 0 ; index < cbSessionCount ; index++)
    {
        CoTaskMemFree(pswSession);
        SAFE_RELEASE(pSessionControl);
        
        // Get the <n>th session.
        CHECK_HR(hr = pSessionList->GetSession(index, &pSessionControl));

        CHECK_HR(hr = pSessionControl->GetDisplayName(&pswSession));

        wprintf_s(L"Session Name: %s\n", pswSession);
    }

done:
    CoTaskMemFree(pswSession);
    SAFE_RELEASE(pSessionControl);
    SAFE_RELEASE(pSessionList);

    return hr;

}

Configuration requise

   
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête audiopolicy.h

Voir aussi

Interfaces audio principales