Como: Usar um XAPOFX no XAudio2
Este tópico mostra como usar um dos efeitos incluídos no XAPOFX em uma cadeia de efeitos XAudio2.
Para usar um efeito de XAPOFX em uma cadeia de efeitos XAudio2
Crie o efeito passando o CLSID de um efeito XAPOFX para a função CreateFX .
Nesse caso, o efeito de reverb simplificado FXReverb está sendo criado.
IUnknown * pXAPO; CreateFX(__uuidof(FXReverb),&pXAPO);
Preencha uma estrutura de XAUDIO2_EFFECT_DESCRIPTOR com dados.
XAUDIO2_EFFECT_DESCRIPTOR descriptor; descriptor.InitialState = true; descriptor.OutputChannels = 1; descriptor.pEffect = pXAPO;
Preencha uma estrutura XAUDIO2_EFFECT_CHAIN com dados.
XAUDIO2_EFFECT_CHAIN chain; chain.EffectCount = 1; chain.pEffectDescriptors = &descriptor;
Aplique a cadeia de efeitos a uma voz XAudio2 com a função SetEffectChain .
pVoice->SetEffectChain(&chain);
Observação
Você também pode aplicar uma cadeia de efeitos a uma voz ao criar a voz passando a cadeia como um parâmetro para IXAudio2::CreateSourceVoice, IXAudio2::CreateSubmixVoice ou IXAudio2::CreateMasteringVoice.
Libere o efeito com IUnknown::Release. Quando você criar um XAPO, ele terá uma contagem de referência de 1. Quando o XAPO é passado para XAudio2 com SetEffectChain, XAudio2 incrementa a contagem de referência no XAPO. Liberar a referência do cliente ao XAPO permite que XAudio2 se aproprie do XAPO. Se XAudio2 tiver a única referência ao XAPO, essa referência será descartada quando ela não estiver mais sendo usada pelo XAudio2. Se o código do cliente precisar manter uma referência ao XAPO, por exemplo, para reutilizar mais tarde, você poderá ignorar essa etapa.
pXAPO->Release();
Preencha a estrutura de parâmetros, se houver, associada ao efeito .
Nesse caso, a estrutura FXREVERB_PARAMETERS é usada para definir a difusão e o tamanho da sala que o efeito reverb deve usar.
FXREVERB_PARAMETERS XAPOParameters; XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION; XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
Passe a estrutura do parâmetro de efeito para o efeito chamando a função SetEffectParameters na voz à qual o efeito está anexado.
hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( FXREVERB_PARAMETERS ) );
Tópicos relacionados