Cómo: usar un XAPO en XAudio2
En este tema se muestra cómo usar un efecto creado con la API de XAPO en una cadena de efectos XAudio2.
Cree el XAPO como se describe en Cómo: Crear un XAPO.
También puede implementar la funcionalidad de parámetros en tiempo de ejecución como se describe en Cómo: Agregar compatibilidad con parámetros en tiempo de ejecución a un XAPO.
Cree una instancia de XAPO.
IUnknown * pXAPO; pXAPO = new SimpleXAPO();
Rellene una estructura de XAUDIO2_EFFECT_DESCRIPTOR con datos.
XAUDIO2_EFFECT_DESCRIPTOR descriptor; descriptor.InitialState = true; descriptor.OutputChannels = 1; descriptor.pEffect = pXAPO;
Rellene una estructura de XAUDIO2_EFFECT_CHAIN con datos.
XAUDIO2_EFFECT_CHAIN chain; chain.EffectCount = 1; chain.pEffectDescriptors = &descriptor;
Aplique la cadena de efectos a una voz XAudio2 con la función SetEffectChain .
pVoice->SetEffectChain(&chain);
Nota
También se puede aplicar una cadena de efectos a una voz cuando se crea la voz pasando la cadena como parámetro a IXAudio2::CreateSourceVoice, IXAudio2::CreateSubmixVoice o IXAudio2::CreateMasteringVoice.
Libere el efecto con IUnknown::Release.
Al crear un XAPO, tendrá un recuento de referencias de 1. Cuando el XAPO se pasa a XAudio2 con SetEffectChain, XAudio2 incrementa el recuento de referencias en el XAPO. Liberar la referencia del cliente a XAPO permite que XAudio2 tome posesión del XAPO. Si XAudio2 tiene la única referencia al XAPO, se eliminará cuando XAudio2 ya no la use. Si el código de cliente necesita mantener una referencia al XAPO para su reutilización posterior, por ejemplo, debe omitir este paso.
pXAPO->Release();
Rellene la estructura de parámetros, si existe, asociada al efecto. En este caso, el porcentaje de fuerza completa en el que se debe aplicar el efecto.
XAPO_PARAMETERS XAPOParameters; XAPOParameters.Level = 0.75;
Pase la estructura de parámetros de efecto al efecto llamando a la función SetEffectParameters en la voz a la que se adjunta el efecto.
hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( XAPO_PARAMETERS ) );
Temas relacionados