Partager via


Interface IAudioVolumeDuckNotification (audiopolicy.h)

L’interface IAudioVolumeDuckNotification est utilisée par le système pour envoyer des notifications sur les modifications d’atténuation de flux. Stream atténuation, ou canardage, est une fonctionnalité introduite dans Windows 7, où le système ajuste le volume d’un flux de non-communication lors de l’ouverture d’un nouveau flux de communication. Pour plus d’informations sur cette fonctionnalité, consultez Expérience de canardage par défaut.

Héritage

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

Méthodes

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

 
IAudioVolumeDuckNotification ::OnVolumeDuckNotification

La méthode OnVolumeDuckNotification envoie une notification à propos d’un événement de canardage système en attente.
IAudioVolumeDuckNotification ::OnVolumeUnduckNotification

La méthode OnVolumeUnduckNotification envoie une notification concernant un événement de désinducation du système en attente.

Remarques

Si une application doit refuser l’expérience d’atténuation du système fournie par le système, elle doit appeler IAudioSessionControl2 ::SetDuckingPreference et spécifier cette préférence.

Contrairement aux autres interfaces WASAPI, qui sont implémentées par le composant système WASAPI, l’interface IAudioVolumeDuckNotification est implémentée par l’application pour fournir un comportement d’atténuation de flux personnalisé. Pour recevoir des notifications d’événements, l’application transmet à la méthode IAudioSessionManager2 ::RegisterDuckNotification un pointeur vers l’implémentation d’IAudioVolumeDuckNotification de l’application.

Une fois que l’application a inscrit son interface IAudioVolumeDuckNotification , le gestionnaire de session appelle l’implémentation IAudioVolumeDuckNotification lorsqu’elle a besoin d’envoyer des notifications d’exclusion. L’application reçoit des notifications d’événements sous 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 ::UnregisterDuckNotification . La méthode UnregisterDuckNotification supprime l’inscription d’une interface IAudioVolumeDuckNotification 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.

Pour plus d’informations, consultez Considérations d’implémentation pour les notifications de canardage.

Exemples

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



class CDuckNotification : public IAudioVolumeDuckNotification
{
    LONG            _Cref;
    HWND            m_hwndMain;

    CDuckNotification (HWND hWnd) : 
        _Cref(1), 
        m_hwndMain (hWnd)
							 {}

    
    HRESULT OnVolumeDuckNotification (LPCWSTR SessionID, UINT32 CommunicationSessionCount)
    {
         PostMessage(m_hwndMain, WM_VOLUME_DUCK, 0, 0);
         return S_OK;
    }
    HRESULT OnVolumeUnduckNotification (LPCWSTR SessionID)
    {
         PostMessage(m_hwndMain, WM_VOLUME_UNDUCK, 0, 0);
         return S_OK;
    }

protected:
    ~CDuckNotification() {}

public:
    HRESULT QueryInterface (REFIID Iid, void** ReturnValue)
    {
        if (ReturnValue == NULL)
        {
            return E_POINTER;
        }
        *ReturnValue = NULL;
        if (iid == IID_IUnknown)
        {
            *ReturnValue = static_cast<IUnknown *>(static_cast<IAudioVolumeDuckNotification *>(this));
            AddRef();
        }
        else if (iid == __uuidof(IAudioVolumeDuckNotification))
        {
            *ReturnValue = static_cast<IAudioVolumeDuckNotification *>(this);
            AddRef();
        }
        else
        {
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    ULONG AddRef()
    {
        return InterlockedIncrement(&_Cref);
    }

    ULONG Release()
    {
        LONG ref = InterlockedDecrement(&_Cref);
        if (ref == 0)
        {
            delete this;
        }
        return 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

Utilisation d’un appareil de communication