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 ビルド 22000 |
Header | audioclient.h |