Procédure : Créer une chaîne d’effets

Cette rubrique vous montre comment appliquer une chaîne d’effets à une voix pour autoriser le traitement personnalisé des données audio pour cette voix. Cette rubrique explique comment utiliser l’effet de réverbération, qui est l’un des effets XAudio2 intégrés.

Pour créer une chaîne d’effets de base qui applique un effet à une voix

  1. Créez l’effet.

    Dans cet exemple, la fonction XAudio2CreateReverb crée un effet de réverbération. Consultez Effets audio XAudio2 pour obtenir la liste des sources possibles d’effets à utiliser avec XAudio2.

    IUnknown * pXAPO;
    hr = XAudio2CreateReverb(&pXAPO);
    
  2. Remplissez une structure XAUDIO2_EFFECT_DESCRIPTOR avec des données.

    S’il existe plusieurs effets dans la chaîne, chaque effet nécessite une structure XAUDIO2_EFFECT_DESCRIPTOR .

    XAUDIO2_EFFECT_DESCRIPTOR descriptor;
    descriptor.InitialState = true;
    descriptor.OutputChannels = 1;
    descriptor.pEffect = pXAPO;
    
  3. Remplir une structure de XAUDIO2_EFFECT_CHAIN avec des données. Dans ce cas, la chaîne n’a qu’un seul effet. Si la chaîne a plusieurs effets, le membre EffectCount contient le nombre d’effets et le membre pEffectDescriptors pointe vers un tableau de structures XAUDIO2_EFFECT_DESCRIPTOR.

    XAUDIO2_EFFECT_CHAIN chain;
    chain.EffectCount = 1;
    chain.pEffectDescriptors = &descriptor;
    
  4. Appliquez la chaîne d’effets à une voix avec la fonction SetEffectChain .

    Vous pouvez appliquer des chaînes d’effets aux voix master, aux voix sources et aux voix de sous-mélange.

    pVoice->SetEffectChain(&chain);
    
  5. Relâchez l’effet avec IUnknown::Release.

    Lorsque vous créez un XAPO, il a un nombre de références de 1. Lorsque le XAPO est passé à XAudio2 avec SetEffectChain, XAudio2 incrémente le nombre de références sur le XAPO. La publication de la référence du client à l’objet XAPO permet à XAudio2 de s’approprier le XAPO. Si XAudio2 a la seule référence à XAPO, il sera supprimé lorsqu’il n’est plus utilisé par XAudio2. Si le code client doit conserver une référence à XAPO (par exemple pour une réutilisation ultérieure), vous devez ignorer cette étape.

    pXAPO->Release();
    
  6. Renseignez la structure de paramètre, le cas échéant, associée à l’effet. L’effet de réverbération utilise une structure XAUDIO2FX_REVERB_PARAMETERS .

    XAUDIO2FX_REVERB_PARAMETERS reverbParameters;
    reverbParameters.ReflectionsDelay = XAUDIO2FX_REVERB_DEFAULT_REFLECTIONS_DELAY;
    reverbParameters.ReverbDelay = XAUDIO2FX_REVERB_DEFAULT_REVERB_DELAY;
    reverbParameters.RearDelay = XAUDIO2FX_REVERB_DEFAULT_REAR_DELAY;
    reverbParameters.PositionLeft = XAUDIO2FX_REVERB_DEFAULT_POSITION;
    reverbParameters.PositionRight = XAUDIO2FX_REVERB_DEFAULT_POSITION;
    reverbParameters.PositionMatrixLeft = XAUDIO2FX_REVERB_DEFAULT_POSITION_MATRIX;
    reverbParameters.PositionMatrixRight = XAUDIO2FX_REVERB_DEFAULT_POSITION_MATRIX;
    reverbParameters.EarlyDiffusion = XAUDIO2FX_REVERB_DEFAULT_EARLY_DIFFUSION;
    reverbParameters.LateDiffusion = XAUDIO2FX_REVERB_DEFAULT_LATE_DIFFUSION;
    reverbParameters.LowEQGain = XAUDIO2FX_REVERB_DEFAULT_LOW_EQ_GAIN;
    reverbParameters.LowEQCutoff = XAUDIO2FX_REVERB_DEFAULT_LOW_EQ_CUTOFF;
    reverbParameters.HighEQGain = XAUDIO2FX_REVERB_DEFAULT_HIGH_EQ_GAIN;
    reverbParameters.HighEQCutoff = XAUDIO2FX_REVERB_DEFAULT_HIGH_EQ_CUTOFF;
    reverbParameters.RoomFilterFreq = XAUDIO2FX_REVERB_DEFAULT_ROOM_FILTER_FREQ;
    reverbParameters.RoomFilterMain = XAUDIO2FX_REVERB_DEFAULT_ROOM_FILTER_MAIN;
    reverbParameters.RoomFilterHF = XAUDIO2FX_REVERB_DEFAULT_ROOM_FILTER_HF;
    reverbParameters.ReflectionsGain = XAUDIO2FX_REVERB_DEFAULT_REFLECTIONS_GAIN;
    reverbParameters.ReverbGain = XAUDIO2FX_REVERB_DEFAULT_REVERB_GAIN;
    reverbParameters.DecayTime = XAUDIO2FX_REVERB_DEFAULT_DECAY_TIME;
    reverbParameters.Density = XAUDIO2FX_REVERB_DEFAULT_DENSITY;
    reverbParameters.RoomSize = XAUDIO2FX_REVERB_DEFAULT_ROOM_SIZE;
    reverbParameters.WetDryMix = XAUDIO2FX_REVERB_DEFAULT_WET_DRY_MIX;
    
  7. Passez la structure du paramètre d’effet à l’effet en appelant la fonction SetEffectParameters sur la voix à laquelle l’effet est attaché.

    hr = pVoice->SetEffectParameters( 0, &reverbParameters, sizeof( reverbParameters ) );
    
  8. Désactivez ou activez l’effet, chaque fois que cela est approprié.

    Vous pouvez utiliser DisableEffect à tout moment pour désactiver un effet.

    pVoice->DisableEffect(0);
    

    Vous pouvez réactiver un effet avec EnableEffect.

    pVoice->EnableEffect(0);
    

    Les paramètres de DisableEffect et EnableEffect spécifient quel effet dans la chaîne activer ou désactiver.

Effets audio

Guide de programmation XAudio2

Procédure : créer un graphique de traitement audio de base

Vue d’ensemble de XAPO

Guide pratique pour utiliser XAOPFX dans XAudio2

Guide pratique pour utiliser un XAOP dans XAudio2