Condividi tramite


Procedura: Usare XAPOFX in XAudio2

Questo argomento illustra come usare uno degli effetti inclusi in XAPOFX in una catena di effetti XAudio2.

Per usare un effetto da XAPOFX in una catena di effetti XAudio2

  1. Creare l'effetto passando l'effetto CLSID di un effetto XAPOFX alla funzione CreateFX .

    In questo caso, viene creato l'effetto di riverbero semplificato FXReverb.

    IUnknown * pXAPO;
    CreateFX(__uuidof(FXReverb),&pXAPO);
    
  2. Popolare una struttura XAUDIO2_EFFECT_DESCRIPTOR con i dati.

    XAUDIO2_EFFECT_DESCRIPTOR descriptor;
    descriptor.InitialState = true;
    descriptor.OutputChannels = 1;
    descriptor.pEffect = pXAPO;
    
  3. Popolare una struttura XAUDIO2_EFFECT_CHAIN con dati.

    XAUDIO2_EFFECT_CHAIN chain;
    chain.EffectCount = 1;
    chain.pEffectDescriptors = &descriptor;
    
  4. Applicare la catena di effetti a una voce XAudio2 con la funzione SetEffectChain .

    pVoice->SetEffectChain(&chain);
    

    Nota

    È anche possibile applicare una catena di effetti a una voce quando si crea la voce passando la catena come parametro a IXAudio2::CreateSourceVoice, IXAudio2::CreateSubmixVoice o IXAudio2::CreateMasteringVoice.

     

  5. Rilasciare l'effetto con IUnknown::Release. Quando si crea un XAPO, avrà un numero di riferimenti pari a 1. Quando la XAPO viene passata a XAudio2 con SetEffectChain, XAudio2 incrementa il conteggio dei riferimenti sulla XAPO. Il rilascio del riferimento del client alla XAPO consente a XAudio2 di assumere la proprietà della XAPO. Se XAudio2 ha l'unico riferimento alla XAPO, questo riferimento viene eliminato quando non viene più usato da XAudio2. Se il codice client deve mantenere un riferimento alla XAPO, ad esempio per il riutilizzo in un secondo momento, è possibile ignorare questo passaggio.

    pXAPO->Release();
    
  6. Popolare la struttura dei parametri, se presente, associata all'effetto.

    In questo caso, la struttura FXREVERB_PARAMETERS viene usata per impostare la diffusione e le dimensioni della stanza che l'effetto di riverbero deve usare.

    FXREVERB_PARAMETERS XAPOParameters;
    XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION;
    XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
    
  7. Passare la struttura dei parametri dell'effetto all'effetto chiamando la funzione SetEffectParameters sulla voce a cui è collegato l'effetto.

    hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( FXREVERB_PARAMETERS ) );
    

Effetti audio

Guida alla programmazione di XAudio2