Freigeben über


IAudioEffectsManager::SetAudioEffectState-Methode (audioclient.h)

Legt den Status des angegebenen Audioeffekts fest.

Syntax

HRESULT SetAudioEffectState(
  GUID               effectId,
  AUDIO_EFFECT_STATE state
);

Parameter

effectId

Der GUID-Bezeichner des Effekts, für den der Zustand geändert wird. Audioeffekt-GUIDs sind in ksmedia.h definiert.

state

Ein Wert aus dem AUDIO_EFFECT_STATE , der den festzulegenden Zustand angibt.

Rückgabewert

Gibt ein HRESULT zurück, einschließlich, aber nicht beschränkt auf Folgendes.

Wert BESCHREIBUNG
S_OK Erfolg
AUDCLNT_E_EFFECT_NOT_AVAILABLE Der angegebene Effekt ist nicht verfügbar.
AUDCLNT_E_EFFECT_STATE_READ_ONLY Der angegebene Effekt weist einen schreibgeschützten Zustand auf.
AUDCLNT_E_DEVICE_INVALIDATED Der zugeordnete Audiodatenstrom wurde zerstört.

Hinweise

Rufen Sie die aktuelle Liste der Audioeffekte für den zugeordneten Audiostream ab, indem Sie GetAudioEffects aufrufen.

Beispiele

Das folgende Beispiel veranschaulicht die Verwendung von IAudioEffectsManager.SetAudioEffectState zum Deaktivieren des AUDIO_EFFECT_TYPE_DEEP_NOISE_SUPPRESSION Effekts.

HRESULT TryDisablePlatformDeepNoiseSuppression(_In_ IAudioClient *client)
{
    wil::com_ptr_nothrow<IAudioEffectsManager> audioEffectsManager;
    RETURN_IF_FAILED(client->GetService(IID_PPV_ARGS(&audioEffectsManager)));
    wil::unique_cotaskmem_array_ptr<AudioEffect> effects;
    UINT32 numEffects;
    RETURN_IF_FAILED(audioEffectsManager->GetAudioEffects(&effects, &numEffects));

    for (UINT32 i = 0; i < numEffects; i++)
    {
        if (effects[i].id == AUDIO_EFFECT_TYPE_DEEP_NOISE_SUPPRESSION)
        {
            // Check if deep noise suppression can be set and if it is currently on
            if (effects[i].canSetState && effects[i].state == AUDIO_EFFECT_STATE_ON)
            {
                HRESULT hr = audioEffectsManager->SetAudioEffectState(effects[i].id, AUDIO_EFFECT_STATE_OFF);

                // If canSetState changed to false, or the effect was removed, SetAudioEffectState
                // can fail with one of the following error codes.
                if (hr != AUDCLNT_E_EFFECT_NOT_AVAILABLE && hr != AUDCLNT_E_EFFECT_STATE_READ_ONLY)
                {
                    return hr;
                }
            }

            return S_OK;
        }
    }

    return S_OK;
}

Das folgende Beispiel veranschaulicht die Verwendung von IAudioEffectsManager.SetAudioEffectState , um den AUDIO_EFFECT_TYPE_DEEP_NOISE_SUPPRESSION Effekt zu aktivieren.

HRESULT TryEnablePlatformDeepNoiseSuppression(_In_ IAudioClient *client)
{
    wil::com_ptr_nothrow<IAudioEffectsManager> audioEffectsManager;
    RETURN_IF_FAILED(client->GetService(IID_PPV_ARGS(&audioEffectsManager)));
    wil::unique_cotaskmem_array_ptr<AUDIO_EFFECT> effects;
    UINT32 numEffects;
    RETURN_IF_FAILED(audioEffectsManager->GetAudioEffects(&effects, &numEffects));

    for (UINT32 i = 0; i < numEffects; i++)
    {
        if (effects[i].id == AUDIO_EFFECT_TYPE_DEEP_NOISE_SUPPRESSION)
        {
            // Check if deep noise suppression can be set and if it is currently off
            if (effects[i].canSetState && effects[i].state == AUDIO_EFFECT_STATE_OFF)
            {
                HRESULT hr = audioEffectsManager->SetAudioEffectState(effects[i].id, AUDIO_EFFECT_STATE_ON);

                // If canSetState changed to false, or the effect was removed, SetAudioEffectState
                // can fail with one of the following error codes.
                if (hr != AUDCLNT_E_EFFECT_NOT_AVAILABLE && hr != AUDCLNT_E_EFFECT_STATE_READ_ONLY)
                {
                    return hr;
                }
            }

            return S_OK;
        }
        }

        return S_OK;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Build 22000
Kopfzeile audioclient.h