Метод IAudioEffectsManager::SetAudioEffectState (audioclient.h)
Задает состояние указанного звукового эффекта.
Синтаксис
HRESULT SetAudioEffectState(
GUID effectId,
AUDIO_EFFECT_STATE state
);
Параметры
effectId
Идентификатор GUID эффекта, для которого изменяется состояние. Идентификаторы GUID звуковых эффектов определяются в ksmedia.h.
state
Значение из AUDIO_EFFECT_STATE перечисления, указывающее устанавливаемое состояние.
Возвращаемое значение
Возвращает HRESULT, включая, помимо прочего, следующее.
Значение | Описание: |
---|---|
S_OK | Успешное завершение |
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 |
Верхняя часть | audioclient.h |