I’m trying to set up reverb for our game using the Designer API’s facilities for Reverb definitions and EventSystem reverb properties. So far I’ve been able to make some presets in the "Reverb" tab of FMOD Designer and get them working on events in-game using EventSystem::getReverbPreset() and EventSystem::setReverbProperties().
Something seems a bit unusual however. Only events that have a layer with an active effect are bussed to the reverb input. This is the case in both the game and in FMOD Designer (with a reverb in the reverb tab "Active.") For example, enabling an FMOD Compressor on a layer of a particular event will cause it to receive the global reverb in-game and in FMOD Designer. Disabling the compressor will cause the event to be played without the global reverb.
I’ve pored through the documentation and forums quite a bit, but am not totally clear on how the reverb effect set by EventSystem::setReverbProperties() is supposed to operate with events. Am I missing something simple, or are basic events not supposed to be affected by this reverb? Should I be managing my own DSP objects and ChannelGroups instead?
Down the line, I’m planning on using EventSystem::setReverbAmbientProperties() in conjunction with EventReverb objects instead of the global reverb I’m currently using. Is this reverb DSP instance’s connections and determination of which events are bussed to it similar to the reverb mentioned above? So far, I haven’t been able to hear any reverb on events when using setReverbAmbientProperties().
Thank you for any help you can give!
- Logarhythm asked 9 years ago
Thanks audiodev and brett,
Thank you for the feedback. I’m using API version 4.10.3 along with the latest downloadable version of FMOD designer.
I think I have a firm grip on the differences between the ambientreverb and the reverb that is set via EventSystem::setReverbProperties(). I’m actually not using the ambientreverb at all yet. I’m just trying to get events to send to the "SFX Reverb" that is managed by EventSystem::setReverbProperties().
Having discovered the FMOD DspNet tool, I think I can see the bussing architecture clearly. I was a bit confused before because it was unclear to me that the EventSystem::setReverbProperties() global reverb was the same as the System::setReverbProperties() global reverb, for example.
Now I can see my event being sent to the "SFX Reverb" directly (dry) from the "FMOD Wavetable Unit" and also being bussed through layer effects (such as the compressor I added to a layer of the event) until the reverb output and the channel group output are mixed together at the "FMOD ChannelGroup Target Unit."
The strange thing is: the send to the reverb only occurs for events that have a layer effect enabled, and does not occur for events that don’t have layer effects. This is seemingly unrelated from my perspective. The
"Reverb Dry Level" and "Reverb Wet Level" event properties can be set, and they work as expected, but only if an event has a layer effect such as a compressor. All events without layer effects do not get bussed to the reverb send regardless of their wet/dry properties.
Within FMOD Designer, I see the same thing, independently of any custom code (and not connecting to anything.) I am assuming that the reverb tab reverb, when active, should be applied to ALL events, honoring the per-event dry/wet levels. I can turn the reverb on or off for a given event by enabling/disabling its layer effects checkboxes. Does anybody else see this behavior?
None of the events waveforms are streamed, and they are 3D. Could hardware/software settings be related? Perhaps I’m missing a setting or have misconfigured something? I wouldn’t be surprised if I’m missing something subtle on the code end, but seeing the same behavior in FMOD Designer running on its own is a bit baffling.
Thanks again for all your help! I really like FMOD Designer API. I’d appreciate any workaround hints or confirmations of this behavior (e.g. is it intentional?) so I can figure this out!
The answer to my main question popped up on another thread:
The bit I was missing was that I had to change my FMOD Designer project’s wave bank setting "Force Software" to "Yes." Doing so causes events to use the global reverb whether or not they contain layer DSPs. This works in FMOD Designer and in my code.
Note that DSP Net Listener shows that the send to global reverb occurs directly from an event’s "FMOD Wavetable Unit" before the event goes through its layer effects, just as it did for me before. I’m assuming that what I saw before changing the wave banks was only those events with layer effects being "forced" to software.
Many thanks to Brett, mecgouki, and audiodev.
Actually i would have suggested that, but you’d have to have a soundcard with no EAX for that not to have worked.
Force software isn’t needed with a Creative soundcard + hw voices.
For total compatibility software is the best of course.
Please login first to submit.