다음을 통해 공유


IAudioEffectsManager::SetAudioEffectState 메서드(audioclient.h)

지정된 오디오 효과의 상태를 설정합니다.

구문

HRESULT SetAudioEffectState(
  GUID               effectId,
  AUDIO_EFFECT_STATE state
);

매개 변수

effectId

상태가 변경되는 효과의 GUID 식별자입니다. 오디오 효과 GUID는 ksmedia.h에 정의됩니다.

state

설정할 상태를 지정하는 AUDIO_EFFECT_STATE 열거형의 값입니다.

반환 값

다음을 포함하지만 제한되지 않는 HRESULT를 반환합니다.

설명
S_OK Success
AUDCLNT_E_EFFECT_NOT_AVAILABLE 지정된 효과를 사용할 수 없습니다.
AUDCLNT_E_EFFECT_STATE_READ_ONLY 지정된 효과에 읽기 전용인 상태가 있습니다.
AUDCLNT_E_DEVICE_INVALIDATED 연결된 오디오 스트림이 제거되었습니다.

설명

GetAudioEffects를 호출하여 연결된 오디오 스트림에 대한 오디오 효과의 현재 목록을 가져옵니다.

예제

다음 예제에서는 IAudioEffectsManager.SetAudioEffectState 를 사용하여 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;
}

다음 예제에서는 IAudioEffectsManager.SetAudioEffectState 를 사용하여 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;
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Build 22000
머리글 audioclient.h