Partager via


Méthode IAudioEffectsManager ::SetAudioEffectState (audioclient.h)

Définit l’état de l’effet audio spécifié.

Syntaxe

HRESULT SetAudioEffectState(
  GUID               effectId,
  AUDIO_EFFECT_STATE state
);

Paramètres

effectId

Identificateur GUID de l’effet pour lequel l’état est modifié. Les GUID d’effet audio sont définis dans ksmedia.h.

state

Valeur de la AUDIO_EFFECT_STATE énumération spécifiant l’état à définir.

Valeur retournée

Retourne un HRESULT incluant, mais sans s’y limiter, les éléments suivants.

Valeur Description
S_OK Succès
AUDCLNT_E_EFFECT_NOT_AVAILABLE L’effet spécifié n’est pas disponible
AUDCLNT_E_EFFECT_STATE_READ_ONLY L’effet spécifié a un état en lecture seule
AUDCLNT_E_DEVICE_INVALIDATED Le flux audio associé a été détruit.

Remarques

Obtenez la liste actuelle des effets audio pour le flux audio associé en appelant GetAudioEffects.

Exemples

L’exemple suivant illustre l’utilisation de IAudioEffectsManager.SetAudioEffectState pour désactiver l’effet AUDIO_EFFECT_TYPE_DEEP_NOISE_SUPPRESSION .

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

L’exemple suivant illustre l’utilisation de IAudioEffectsManager.SetAudioEffectState pour activer l’effet AUDIO_EFFECT_TYPE_DEEP_NOISE_SUPPRESSION .

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Build 22000
En-tête audioclient.h