Partager via


Interface IAudioSessionNotification (audiopolicy.h)

L’interface IAudioSessionNotification fournit une notification lors de la création d’une session audio.

Héritage

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

Méthodes

L’interface IAudioSessionNotification contient ces méthodes.

 
IAudioSessionNotification ::OnSessionCreated

La méthode OnSessionCreated avertit les processus inscrits que la session audio a été créée.

Remarques

Contrairement aux autres interfaces WASAPI, qui sont implémentées par le composant système WASAPI, l’interface IAudioSessionNotification est implémentée par l’application. Pour recevoir des notifications d’événements, l’application passe à la méthode IAudioSessionManager2 ::RegisterSessionNotification un pointeur vers son implémentation IAudioSessionNotification .

Après avoir inscrit son interface IAudioSessionNotification , l’application reçoit des notifications d’événements sous la forme de rappels via les méthodes de l’interface.

Lorsque l’application n’a plus besoin de recevoir de notifications, elle appelle la méthode IAudioSessionManager2 ::UnregisterSessionNotification . Cette méthode supprime l’inscription d’une interface IAudioSessionNotification précédemment inscrite par l’application.

L’application ne doit pas inscrire ou annuler l’inscription des rappels de notification lors d’un rappel d’événement.

L’énumérateur de session peut ne pas connaître les nouvelles sessions signalées via IAudioSessionNotification. Par conséquent, si une application s’appuie exclusivement sur l’énumérateur de session pour obtenir toutes les sessions d’un point de terminaison audio, les résultats peuvent ne pas être exacts. Pour contourner ce problème, l’application doit gérer manuellement une liste. Pour plus d’informations, consultez IAudioSessionEnumerator.

Note Assurez-vous que l’application initialise 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 du gestionnaire de sessions. Les threads qui exécutent l’interface utilisateur d’une application doivent être initialisés modèle de thread d’appartement.
 

Exemples

L’exemple de code suivant montre un exemple d’implémentation de l’interface IAudioSessionNotification .

class CSessionNotifications: public IAudioSessionNotification
{
private:

    LONG             m_cRefAll;
    HWND m_hwndMain;

    ~CSessionManager(){};

public:


    CSessionManager(HWND hWnd): 
    m_cRefAll(1),
    m_hwndMain (hWnd)

    {}

    // IUnknown
    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv)  
    {    
        if (IID_IUnknown == riid)
        {
            AddRef();
            *ppvInterface = (IUnknown*)this;
        }
        else if (__uuidof(IAudioSessionNotification) == riid)
        {
            AddRef();
            *ppvInterface = (IAudioSessionNotification*)this;
        }
        else
        {
            *ppvInterface = NULL;
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    
    ULONG STDMETHODCALLTYPE AddRef()
    {
        return InterlockedIncrement(&m_cRefAll);
    }
     
    ULONG STDMETHODCALLTYPE Release)()
    {
        ULONG ulRef = InterlockedDecrement(&m_cRefAll);
        if (0 == ulRef)
        {
            delete this;
        }
        return ulRef;
    }

    HRESULT OnSessionCreated(IAudioSessionControl *pNewSession)
    {
        if (pNewSession)
        {
            PostMessage(m_hwndMain, WM_SESSION_CREATED, 0, 0);
        }
    }
};

Configuration requise

Condition requise Valeur
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