Руководство: использование XAPO в XAudio2

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

  1. Создайте XAPO, как описано в разделе Практическое руководство. Создание XAPO.

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

  2. Создайте экземпляр XAPO.

    IUnknown * pXAPO;
    pXAPO = new SimpleXAPO();
    
  3. Заполните структуру XAUDIO2_EFFECT_DESCRIPTOR данными.

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

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

    pVoice->SetEffectChain(&chain);
    

    Примечание

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

     

  6. Отпустите эффект с помощью IUnknown::Release.

    При создании XAPO число ссылок будет иметь значение 1. Когда XAPO передается в XAudio2 с помощью SetEffectChain, XAudio2 увеличивает счетчик ссылок на XAPO. Освобождение ссылки клиента на XAPO позволяет XAudio2 стать владельцем XAPO. Если XAudio2 имеет единственную ссылку на XAPO, она будет удалена, когда она больше не используется XAudio2. Если клиентскому коду необходимо сохранить ссылку на XAPO для последующего повторного использования, этот шаг следует пропустить.

    pXAPO->Release();
    
  7. Заполните структуру параметров, если она есть, связанную с эффектом. В этом случае это процент полной силы, при котором должен применяться эффект.

    XAPO_PARAMETERS XAPOParameters;
    XAPOParameters.Level = 0.75;
    
  8. Передайте структуру параметров эффекта эффекту, вызвав функцию SetEffectParameters для голоса, к которому присоединен эффект.

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

Звуковые эффекты

Обзор протокола XAPO

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