Partager via


Désactivation de l’expérience de canardage par défaut

Un utilisateur peut désactiver l’expérience de canardage par défaut fournie par le système à l’aide des options disponibles sous l’onglet Communications du panneau de configuration multimédia Windows, Mmsys.cpl.

Lors de l’application d’un canardage, un effet de fondu et de fondu en fondu est utilisé pendant une période de 1 seconde. Une application de jeu peut ne pas vouloir que le flux de communication interfère avec l’audio du jeu. Certaines applications multimédias peuvent constater que l’expérience de lecture est déchaînante lorsque la musique s’estompe. Ces types d’applications peuvent choisir de ne pas participer à l’expérience de canardage.

Par programme, un client WASAPI direct peut refuser en utilisant le gestionnaire de session pour la session audio qui fournit le contrôle du volume pour les flux sans communication. Notez que même si un client refuse de se canarder, il reçoit toujours des notifications de canardage du système.

Pour refuser le canardage, le client doit obtenir une référence à l’interface IAudioSessionControl2 du gestionnaire de session. Pour refuser l’expérience de canardage, procédez comme suit :

  1. Instanciez l’énumérateur d’appareil et utilisez-le pour obtenir une référence au point de terminaison de l’appareil que l’application multimédia utilise pour restituer le flux de non-communication.
  2. Activez le gestionnaire de sessions à partir du point de terminaison de l’appareil et obtenez une référence à l’interface IAudioSessionManager2 du gestionnaire de session.
  3. En utilisant le pointeur IAudioSessionManager2 , obtenez une référence à l’interface IAudioSessionControl du gestionnaire de session.
  4. Interrogez IAudioSessionControl2 à partir de l’interface IAudioSessionControl .
  5. Appelez IAudioSessionControl2::SetDuckingPreference et passez TRUE ou FALSE pour spécifier la préférence de canardage. La préférence spécifiée peut être modifiée dynamiquement pendant la session. Notez que la modification de refus n’entre pas en vigueur tant que le flux n’est pas arrêté et redémarré.

Le code suivant montre comment une application peut spécifier sa préférence de candeur. L’appelant de la fonction doit transmettre TRUE ou FALSE dans le paramètre DuckingOptOutChecked. En fonction de la valeur passée, le canevas est activé ou désactivé via IAudioSessionControl2::SetDuckingPreference.

////////////////////////////////////////////////////////////////////
//Description: Specifies the ducking options for the application.
//Parameters: 
//    If DuckingOptOutChecked is TRUE system ducking is disabled; 
//    FALSE, system ducking is enabled.
////////////////////////////////////////////////////////////////////

HRESULT DuckingOptOut(bool DuckingOptOutChecked)
{
    HRESULT hr = S_OK;

    IMMDeviceEnumerator* pDeviceEnumerator NULL;
    IMMDevice* pEndpoint = NULL;
    IAudioSessionManager2* pSessionManager2 = NULL;
    IAudioSessionControl* pSessionControl = NULL;
    IAudioSessionControl2* pSessionControl2 = NULL;


    //  Start with the default endpoint.

    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), 
                          NULL, 
                          CLSCTX_INPROC_SERVER, 
                          IID_PPV_ARGS(&pDeviceEnumerator));
    
    if (SUCCEEDED(hr))
    {
        hr = pDeviceEnumerator>GetDefaultAudioEndpoint(eRender, eConsole, &pEndpoint);

        pDeviceEnumerator>Release();
        pDeviceEnumerator = NULL;
    }

    // Activate session manager.
    if (SUCCEEDED(hr))
    {
        hr = pEndpoint->Activate(__uuidof(IAudioSessionManager2), 
                                 CLSCTX_INPROC_SERVER,
                                 NULL, 
                                 reinterpret_cast<void **>(&pSessionManager2));
        pEndpoint->Release();
        pEndpoint = NULL;
    }
    if (SUCCEEDED(hr))
    {
        hr = pSessionManager2->GetAudioSessionControl(NULL, 0, &pSessionControl);
        
        pSessionManager2->Release();
        pSessionManager2 = NULL;
    }

    if (SUCCEEDED(hr))
    {
        hr = pSessionControl->QueryInterface(
                  __uuidof(IAudioSessionControl2),
                  (void**)&pSessionControl2);
                
        pSessionControl->Release();
        pSessionControl = NULL;
    }

    //  Sync the ducking state with the specified preference.

    if (SUCCEEDED(hr))
    {
        if (DuckingOptOutChecked)
        {
            hr = pSessionControl2->SetDuckingPreference(TRUE);
        }
        else
        {
            hr = pSessionControl2->SetDuckingPreference(FALSE);
        }
        pSessionControl2->Release();
        pSessionControl2 = NULL;
    }
    return hr;
}

Utilisation d’un appareil de communication

Expérience de canardage par défaut

Fournir un comportement de canardage personnalisé

Considérations relatives à l’implémentation des notifications de canardage

Obtention d’événements de canardage