Руководство: использование XAPOFX в XAudio2
В этом разделе показано, как использовать один из эффектов, включенных в XAPOFX, в цепочке эффектов XAudio2.
Использование эффекта из XAPOFX в цепочке эффектов XAudio2
Создайте эффект, передав CLSID эффекта XAPOFX в функцию CreateFX .
В этом случае создается упрощенный эффект реверберации FXReverb.
IUnknown * pXAPO; CreateFX(__uuidof(FXReverb),&pXAPO);
Заполните структуру XAUDIO2_EFFECT_DESCRIPTOR данными.
XAUDIO2_EFFECT_DESCRIPTOR descriptor; descriptor.InitialState = true; descriptor.OutputChannels = 1; descriptor.pEffect = pXAPO;
Заполните структуру XAUDIO2_EFFECT_CHAIN данными.
XAUDIO2_EFFECT_CHAIN chain; chain.EffectCount = 1; chain.pEffectDescriptors = &descriptor;
Примените цепочку эффектов к голосу XAudio2 с помощью функции SetEffectChain .
pVoice->SetEffectChain(&chain);
Примечание
Вы также можете применить цепочку эффектов к голосу при создании голоса, передав цепочку в качестве параметра в IXAudio2::CreateSourceVoice, IXAudio2::CreateSubmixVoice или IXAudio2::CreateMasteringVoice.
Опубликуйте эффект с помощью IUnknown::Release. При создании XAPO число ссылок будет иметь значение 1. Когда XAPO передается в XAudio2 с помощью SetEffectChain, XAudio2 увеличивает количество ссылок в XAPO. Освобождение ссылки клиента на XAPO позволяет XAudio2 стать владельцем XAPO. Если XAudio2 имеет единственную ссылку на XAPO, эта ссылка удаляется, когда XAudio2 больше не используется. Если клиентскому коду необходимо сохранить ссылку на XAPO( например, для повторного использования позже), этот шаг можно пропустить.
pXAPO->Release();
Заполните структуру параметров, если она есть, связанную с эффектом.
В этом случае FXREVERB_PARAMETERS структура используется для задания диффузии и размера помещения, которые должен использовать эффект реверберации.
FXREVERB_PARAMETERS XAPOParameters; XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION; XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
Передайте структуру параметров эффекта эффекту, вызвав функцию SetEffectParameters в голосе, к которому присоединен эффект.
hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( FXREVERB_PARAMETERS ) );
Связанные темы