Freigeben über


Deaktivieren der Standardmäßigen Entenerfahrung

Ein Benutzer kann die vom System bereitgestellte Standard-Entenerfahrung mithilfe der Optionen deaktivieren, die auf der Registerkarte Kommunikation der Windows-Multimedia-Systemsteuerung verfügbar sind, Mmsys.cpl.

Beim Anwenden des Entens wird ein Ausblend- und Einblendeffekt für einen Zeitraum von 1 Sekunde verwendet. Eine Spieleanwendung möchte möglicherweise nicht, dass der Kommunikationsdatenstrom die Spielaudio beeinträchtigt. Einige Medienanwendungen stellen möglicherweise fest, dass die Wiedergabeerfahrung verstreckt ist, wenn Musik wieder einblendet. Diese Arten von Anwendungen können sich dafür entscheiden, nicht an der Ducking-Erfahrung teilzunehmen.

Programmgesteuert kann sich ein direkter WASAPI-Client abmelden, indem er den Sitzungs-Manager für die Audiositzung verwendet, die die Lautstärkesteuerung für die Nicht-Kommunikationsdatenströme bereitstellt. Beachten Sie, dass ein Client auch dann, wenn er sich gegen das Ducking entscheidet, weiterhin ducking-Benachrichtigungen vom System erhält.

Um das Ducking zu deaktivieren, muss der Client einen Verweis auf die IAudioSessionControl2-Schnittstelle des Sitzungs-Managers abrufen. Führen Sie die folgenden Schritte aus, um die Ducking-Erfahrung zu deaktivieren:

  1. Instanziieren Sie den Geräteenumerator, und verwenden Sie ihn, um einen Verweis auf den Endpunkt des Geräts abzurufen, das die Medienanwendung zum Rendern des Nicht-Kommunikationsdatenstroms verwendet.
  2. Aktivieren Sie den Sitzungs-Manager über den Geräteendpunkt, und rufen Sie einen Verweis auf die IAudioSessionManager2-Schnittstelle des Sitzungs-Managers ab.
  3. Rufen Sie mithilfe des Zeigers IAudioSessionManager2 einen Verweis auf die IAudioSessionControl-Schnittstelle des Sitzungs-Managers ab.
  4. Fragen Sie IAudioSessionControl2 über die IAudioSessionControl-Schnittstelle ab.
  5. Rufen Sie IAudioSessionControl2::SetDuckingPreference auf, und übergeben Sie TRUE oder FALSE , um die Ducking-Einstellung anzugeben. Die angegebene Einstellung kann während der Sitzung dynamisch geändert werden. Beachten Sie, dass die Opt-out-Änderung erst wirksam wird, wenn der Stream beendet und erneut gestartet wird.

Der folgende Code zeigt, wie eine Anwendung ihre Ducking-Einstellung angeben kann. Der Aufrufer der Funktion muss TRUE oder FALSE im DuckingOptOutChecked-Parameter übergeben. Abhängig vom übergebenen Wert wird das Ducken über IAudioSessionControl2::SetDuckingPreference aktiviert oder deaktiviert.

////////////////////////////////////////////////////////////////////
//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;
}

Verwenden eines Kommunikationsgeräts

Standard-Ducking-Erfahrung

Bereitstellen eines benutzerdefinierten Duckingverhaltens

Überlegungen zur Implementierung von Duckingbenachrichtigungen

Abrufen von Ducking-Ereignissen