EventInstance SetReverbProperties feature request

(Damiano) #1

Rigth now it seems there is no way to disable reverb on EventInstance, am i right?
A function like

FMOD_Studio_EventInstance_SetReverbProperties(eventInstance, instance, wet);

may be needed for that purpose.
Thanks in advance.

(Graeme Webb) #2

The Studio API does not use the low level reverb system, so it is disabled by default on event instances. Have you been hearing unexpected reverb coming from events?

(Damiano) #3

It seems only the 3D reverb using FMOD_System_CreateReverb3D affects EventInstances. The reverbs created manually with FMOD_System_SetReverbProperties have no effect.

The 3D reverbs is a great feature of FMOD, but Its potential is restricted if It is not intended to be used with the Studio API.

I use both the lowlevel and studio API in my program, and I think the ability to have 3D reverb affects 3D EventInstance is very useful to keep 3D sounds consistent automatically with 3D reverb spheres placed in the world.
Naturally it should be a way to disable the effect for certain EventInstances.

(Damiano) #4

If the Studio API does not use the low level reverb system, then the reverb I’m hearing is caused by a bug in the 3D reverb system?

In that case I would like to add to my feature request the possibility to continue using the 3D reverb with the Studio API.

(Graeme Webb) #5

It looks like you have found a runtime bug in the Studio API. The low level reverb system is supposed to be disabled by default on event instances. The event code achieves this by calling Channel::setReverbProperties(0, 0.0f) on each new channel that it creates. However, it looks like there are certain cases where this code is not executed, and the channel will be left with its default setting (wet = 1 for reverb instance 0, wet = 0 for reverb instances 1 - 3).

That would explain why you can hear reverb for events via the 3D reverb created with System::createReverb3D, because that system uses reverb instance 0 by default.

I agree that the low level 3D reverb system is a great feature, and that we should extend it to affect event instances too, via the Studio API. In fact we do intend to add support for this in an upcoming release. In the mean time, here’s a workaround that will let you enable or disable 3D reverb per event instance in the current version…

To enable reverb on an event instance, call Studio::EventInstance::getChannelGroup to obtain the ChanelGroup corresponding to the event’s master track. Then call the low level API: ChannelGroup::setReverbProperties(0, wet), where 0 < wet <= 1.

To disable reverb on an event instance, you again call Studio::EventInstance::getChannelGroup to obtain the ChanelGroup of the event’s master track. But you can’t just call ChannelGroup::setReverbProperties(0, 0) because then the reverb behavior will revert back to the individual channel settings. The workaround is to set the wet level to a very small non-zero value. For example, ChannelGroup::setReverbProperties(0, 0.0001) will likely be inaudible.

Please note that there are several gotchas you need to be aware of when reaching in to the channel group of a playing event instance. Read the documentation of Studio::EventInstance::getChannelGroup for the gory details…


(Damiano) #6

Thank you very much!
I was able to disable reverb with your help. The small float value was effective.