Cómo: usar XAPOFX en XAudio2
En este tema se muestra cómo usar uno de los efectos incluidos en XAPOFX en una cadena de efectos XAudio2.
Para usar un efecto de XAPOFX en una cadena de efectos XAudio2
Cree el efecto pasando el CLSID de un efecto XAPOFX a la función CreateFX .
En este caso, se crea el efecto de reverberación simplificado FXReverb.
IUnknown * pXAPO; CreateFX(__uuidof(FXReverb),&pXAPO);
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 puede aplicar una cadena de efectos a una voz al crear 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 XAPO. Liberar la referencia del cliente a XAPO permite que XAudio2 tome posesión del XAPO. Si XAudio2 tiene la única referencia a XAPO, esta referencia se elimina cuando XAudio2 ya no la usa. Si el código de cliente necesita mantener una referencia al XAPO (por ejemplo, para reutilizarlo más adelante), puede omitir este paso.
pXAPO->Release();
Rellene la estructura de parámetros, si existe, asociada al efecto.
En este caso, la estructura FXREVERB_PARAMETERS se usa para establecer la difusión y el tamaño de la sala que debe usar el efecto de reverberación.
FXREVERB_PARAMETERS XAPOParameters; XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION; XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
Pase la estructura de parámetros de efecto al efecto llamando a la función SetEffectParameters en la voz a la que está asociado el efecto.
hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( FXREVERB_PARAMETERS ) );
Temas relacionados