방법: 효과 체인 만들기

이 항목에서는 음성에 효과 체인을 적용하여 해당 음성에 대한 오디오 데이터의 사용자 지정 처리를 허용하는 방법을 보여줍니다. 이 항목에서는 기본 제공 XAudio2 효과 중 하나인 반향 효과를 사용하는 방법을 설명합니다.

음성에 효과를 적용하는 기본 효과 체인을 만들려면

  1. 효과를 만듭니다.

    이 예제에서 XAudio2CreateReverb 함수는 반향 효과를 만듭니다. XAudio2와 함께 사용할 수 있는 효과 원본 목록은 XAudio2 오디오 효과를 참조하세요.

    IUnknown * pXAPO;
    hr = XAudio2CreateReverb(&pXAPO);
    
  2. XAUDIO2_EFFECT_DESCRIPTOR 구조체를 데이터로 채웁다.

    체인에 여러 효과가 있는 경우 각 효과에는 XAUDIO2_EFFECT_DESCRIPTOR 구조가 필요합니다.

    XAUDIO2_EFFECT_DESCRIPTOR descriptor;
    descriptor.InitialState = true;
    descriptor.OutputChannels = 1;
    descriptor.pEffect = pXAPO;
    
  3. XAUDIO2_EFFECT_CHAIN 구조체를 데이터로 채웁다. 이 경우 체인에는 하나의 효과만 있습니다. 체인에 둘 이상의 효과가 있는 경우 EffectCount 멤버에는 효과 수가 포함되고 pEffectDescriptors 멤버는 XAUDIO2_EFFECT_DESCRIPTOR 구조체의 배열을 가리킵니다.

    XAUDIO2_EFFECT_CHAIN chain;
    chain.EffectCount = 1;
    chain.pEffectDescriptors = &descriptor;
    
  4. SetEffectChain 함수를 사용하여 효과 체인을 음성에 적용합니다.

    효과 체인을 master 음성, 소스 음성 및 서브믹스 음성에 적용할 수 있습니다.

    pVoice->SetEffectChain(&chain);
    
  5. IUnknown::Release를 사용하여 효과를 해제합니다.

    XAPO를 만들 때 참조 수는 1입니다. SetEffectChain을 사용하여 XAudio2에 XAPO가 전달되면 XAudio2는 XAPO에 대한 참조 수를 증분합니다. XAPO에 대한 클라이언트의 참조를 해제하면 XAudio2에서 XAPO의 소유권을 가져올 수 있습니다. XAudio2에 XAPO에 대한 유일한 참조가 있는 경우 XAudio2에서 더 이상 사용되지 않을 때 삭제됩니다. 클라이언트 코드가 XAPO에 대한 참조를 유지 관리해야 하는 경우(예: 나중에 다시 사용) 이 단계를 건너뛰어야 합니다.

    pXAPO->Release();
    
  6. 효과와 연결된 매개 변수 구조(있는 경우)를 채웁다. 반향 효과는 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. 효과가 연결된 음성에서 SetEffectParameters 함수를 호출하여 효과 매개 변수 구조를 효과에 전달합니다.

    hr = pVoice->SetEffectParameters( 0, &reverbParameters, sizeof( reverbParameters ) );
    
  8. 적절한 경우 효과를 사용하지 않도록 설정하거나 사용하도록 설정합니다.

    언제든지 DisableEffect를 사용하여 효과를 끌 수 있습니다.

    pVoice->DisableEffect(0);
    

    EnableEffect를 사용하여 효과를 다시 켤 수 있습니다.

    pVoice->EnableEffect(0);
    

    DisableEffectEnableEffect에 대한 매개 변수는 체인에서 사용하거나 사용하지 않도록 설정할 효과를 지정합니다.

오디오 효과

XAudio2 프로그래밍 지침

방법: 기본 오디오 처리 그래프 빌드

XAPO 개요

방법: XAudio2에서 XAOPFX 사용

방법: XAudio2에서 XAOP 사용