Поделиться через


Практическое руководство. Использование XAPOFX в XAudio2

В этом разделе показано, как использовать один из эффектов, включенных в XAPOFX в цепочке эффектов XAudio2.

Использование эффекта от XAPOFX в цепочке эффектов XAudio2

  1. Создайте эффект, передав CLSID эффекта XAPOFX в функцию CreateFX.

    В этом случае создается упрощенный эффект реверберации под названием FXReverb.

    IUnknown * pXAPO;
    CreateFX(__uuidof(FXReverb),&pXAPO);
    
  2. Заполните структуру XAUDIO2_EFFECT_DESCRIPTOR данными.

    XAUDIO2_EFFECT_DESCRIPTOR descriptor;
    descriptor.InitialState = true;
    descriptor.OutputChannels = 1;
    descriptor.pEffect = pXAPO;
    
  3. Заполните структуру XAUDIO2_EFFECT_CHAIN данными.

    XAUDIO2_EFFECT_CHAIN chain;
    chain.EffectCount = 1;
    chain.pEffectDescriptors = &descriptor;
    
  4. Примените цепочку эффектов к голосу XAudio2 с функцией SetEffectChain.

    pVoice->SetEffectChain(&chain);
    

    Заметка

    Вы также можете применить цепочку эффектов к голосу при создании голоса, передав цепочку в качестве параметра для IXAudio2::CreateSourceVoice, IXAudio2::CreateSubmixVoiceили IXAudio2::CreateMasteringVoice.

     

  5. Отпустите эффект с помощью IUnknown::Release. При создании XAPO его счетчик ссылок будет равен 1. Когда XAPO передается в XAudio2 с SetEffectChain, XAudio2 увеличивает количество ссылок в XAPO. Освобождение ссылки клиента на XAPO позволяет XAudio2 взять на себя ответственность за XAPO. Если XAudio2 имеет единственную ссылку на XAPO, эта ссылка удаляется, когда она больше не используется XAudio2. Если клиентский код должен поддерживать ссылку на XAPO ( например, для повторного использования позже), можно пропустить этот шаг.

    pXAPO->Release();
    
  6. Заполните структуру параметров, если она есть, связанную с эффектом.

    В этом случае структура FXREVERB_PARAMETERS используется для установки диффузии и размера комнаты, которые следует использовать эффект реверберации.

    FXREVERB_PARAMETERS XAPOParameters;
    XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION;
    XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
    
  7. Передайте структуру параметров эффекта, вызвав функцию SetEffectParameters на голосе, к которому присоединен эффект.

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

Аудиоэффекты

Руководство по программированию XAudio2