Нарушенная пространственная локализация при использовании Resonance Audio из FMOD Low Level API - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь включить пространственное звучание Resonance Audio при использовании плагина Resonance Audio для FMOD и пытаюсь настроить DSP вручную, без FMOD Studio.

Мой код для загрузки плагина и настройки DSP:

auto system = audio->fmod->system; //instance of FMOD::System
unsigned int resHandle;
CHECK_ERR(system->loadPlugin("../lib/resonanceaudio.dll", &resHandle, 0));

//0 = Resonance Audio Listener
//1 = Resonance Audio Soundfield
//2 = Resonance Audio Source
unsigned int listenerPlugin, sourcePlugin;
system->getNestedPlugin(resHandle, 0, &listenerPlugin);
system->getNestedPlugin(resHandle, 2, &sourcePlugin);

FMOD::DSP* listenerDsp;
CHECK_ERR(system->createDSPByPlugin(listenerPlugin, &listenerDsp));
FMOD::DSP* sourceDsp;
CHECK_ERR(system->createDSPByPlugin(sourcePlugin, &sourceDsp));

//This a channel group routed from the Master group
//I want to spatialize all sounds which are played in this group
FMOD::ChannelGroup *worldGroup = nullptr;
system->createChannelGroup("World", &worldGroup);
FMOD::ChannelGroup *masterGroup = nullptr;
system->getMasterChannelGroup(&masterGroup);
masterGroup->addGroup(worldGroup);

//Adding Resonance Audio dsps to the group
worldGroup->addDsp(0, sourceDsp);
worldGroup->addDsp(1, listenerDsp);

//Setting listener's position at (0, 0, 0)
system->set3DListenerAttributes(0, FMOD_VECTOR{0, 0, 0}, 0, FMOD_VECTOR{0, 0, 1}, FMOD_VECTOR{0, 1, 0});

<loading sound> 

FMOD::Channel* channel = nullptr;
CHECK_ERR(system->playSound(sound, worldGroup, true, &channel));
channel->setMode(FMOD_3D);
channel->set3DAttributes(FMOD_VECTOR{4, 0, 3}, nullptr);
channel->setPaused(false);

<somewhere in update loop>
   system->update();

Но после всего этого я вообще ничего не слышу.

Я предполагаю, что ошибка на моей стороне, поэтому я попытался повторить ту же настройку в FMOD Studio.Как и в коде, я поместил Resonance Audio Source перед Resonance Audio Listener на мастер-трек события, и все работало правильно (по крайней мере, в FMOD Studio, не пробовал это в игре).

Как исправитьэтот вопрос?

1 Ответ

0 голосов
/ 11 июня 2018

Исходя из того, что я думаю, вы должны звонить:

System::getMasterChannelGroup

Чтобы получить экземпляр группы мастер-каналов и затем назначить резонансные звуковые ЦСП для группы мастер-каналов.

//This a channel group routed from the Master group
//I want to spatialize all sounds which are played in this group
FMOD::ChannelGroup *worldGroup>;
<worldGroup setup>

Исходя из этого, я не совсем понял, что вы имели в виду, так как не могу понять, где вы настроили маршрутизацию ChannelGroup с главного канала.Если решение, которое я предоставил, является неправильным, пожалуйста, предоставьте дополнительную информацию о коде, который я упомянул выше.

...