It could be helpful, if the FMOD Convolver could operate the convolution at the sample rate of the imported impulse.
The Convolver will be cheaper to run if it processes at a lower rate; and impulses often don’t have such high frequencies in them in any case, especially in the tail end of outdoor impulses. Supporting lower rates in the Convolver would help optimize performance.
Also, the shorter the imulse, the cheaper it is to run, but that’s another story.
That is a wonderful suggestion! I have added it to our tracker to take a look at for a future release. Thank you for the suggestion.
Thanks for the tip about length, didn`t know that. Also i have a question about reverb. Did you design it with an idea of using multiple convolutions at once ( at full use, 100% ) or was it meant to be used mostly one by one? I am having issues like cracking and small bursts when i use more than one ( not talking about crossfading, no issues there ).
For example, i want to put a large cathedral impulse in one effect and a delay impulse in another. When i add the second one it starts to cause audible problems.
The FMOD Convolution doesn’t really support “presets” the same way that you can ‘morph’ between settings of the DSP Reverb with snapshots; so it’s a bit difficult to use the Convolution for anything but just one thing at a time in the mixer (such as, a default outdoor impulse for loud sounds like guns and explosions). Having multiple Convolutions active all the time would be prohibitively expensive on the CPU.
One possible way to do it could be, maybe, to have a mixer return that Transceives what it receives, and place the Convolution impulses into 2D FMOD Events that are started and stopped based on which “preset” you want to use. These events would have a Transceiver receive followed by a Convolution impulse containing your preferred preset. Whatever Convolutions are not needed, can be stopped by stopping the FMOD event carrying it.
There will be mixing block latency due to sending to the mixer and then back to events, but with reverb this shouldn’t be a big issue since the impulses are meant to be delayed anyway.
That’s just something I thought up, maybe this is not the way to go?
Thanks for the idea. I tried it in a big room and it really makes a difference. First my reverb was 15sec long and the CPUmixer was at 20%, later i trimmed the impulse to 10sec and the CPU was at 15%, last part was a test with a super short 1sec impulse and the CPUmixer went down to 8%. All the IR files are 6 channel.
Regarding the crossfades and use of multiple reverbs i think it is ok to use them for transitions. There was a demo of Fmod page which i can not find now, it was a slider that demonstrated cost of ConvRev on CPU. From that i realize that if you use 2 at half amount it the same as using one. Or at least not much more. Don`t know if i am right.
The convolution reverb effect is relatively expensive, so we envisaged most projects only having one instance of it running at any given time.
One more things, can you tell me how you envisaged the transitions from one acoustic area to another? How to crossfade reverbs between those places.
My suggestion to place the Convolvers with different impulses into FMOD events (instead of the mixer) and used through a mixer return with a Transceiver could take care of the crossfades, as you could use an AHDSR in the event’s master gain to fade the events in and out.
You’d need a control from the game side to start and stop the events (toggle between them) as you move from space to space. During the fade two Convolutions would be active and hogging CPU, but maybe that’s acceptable.
Firelight, what’s your take on this approach?
It would depend on your resource budget, but assuming you have the resources for two convolution reverb effects, this method should work well.
Can you please comment on how did you envisaged the transiotions from one Convolution reverb to another? One hall to another hall, lets`s say for example…
What is the “by the books” method?
There’s no “One True Way” to do this, but Skaven252’s solution would work. Here’s how you’d apply it to your “two halls” example:
- Create two events, each containing a transceiver effect set to receive and a convolution reverb effect. Each of these events represents a different hall, so give each the impulse response appropriate to that hall.
- Add an AHDSR modulator on to the transceiver’s level, and assign appropriate attack and release periods.
- Add a transceiver effect set to transmit to the group bus in your mixer into which all the events you want to be affected by reverb are routed.
- In your game’s code, start an instance of the event associated with a hall whenever the listener enters that hall, and stop it (allowing fadeout) whenever the listener leaves that hall.
I would place the AHDSR to the master gain of the event rather than the transceiver’s level, otherwise stop may not left the event to fade out.
The fade out time should be matched closer to the length of the reverb tail, unless the transition between the spaces needs to be sharper so the tail should be fade-cut out shorter.
These don’t need to be Transceivers, they can just be normal Sends to the mixer return that contains the Transceiver.
However, if you use Transceivers in every event that needs to send to reverb, they won’t in fact have to route through the mixer at all - they can just send directly to the “reverb channel”. The signals will mix together (I’ve tested sending multiple signals to the same channel, they just mix).
This way there will actually be less latency, than with going through the mixer.