Firelight Technologies FMOD Studio API
REVERB NOTES
Introduction
This section will discuss FMOD's reverb parameters focusing on the software (SFX) implementation.The fields of FMOD_REVERB_PROPERTIES (found in 'fmod.h') control both hardware and software instances of reverb. Hardware reverbs have a few parameters that the software effect doesn't use, so you can ignore these for the purpose of this discussion. For example, EnvDiffusion is NOT used by the software reverb because it is only meaningful to Wii.
FMOD's software reverb DSP is controlled by parameters defined in the I3DL2 guidelines, which describe the reverberant environment of the listener.
Here's a list of the fields of FMOD_REVERB_PROPERTIES that currently have an effect and a description of what they do within the context of the software reverb. The descriptions are much the same as in 'fmod.h'.
Environment | Turns the reverb off if set to -1 |
Room | Room effect level at mid frequencies |
RoomHF | Relative room effect level at high frequencies |
RoomLF | Relative room effect level at low frequencies |
DecayTime | Reverberation decay time at mid frequencies |
DecayHFRatio | High-frequency to mid-frequency decay time ratio |
Reflections | Early reflections level relative to room effect |
ReflectionsDelay | Initial reflection delay time |
Reverb | Late reverberation level relative to room effect |
ReverbDelay | Late reverberation delay time relative to initial reflection |
HFReference | Reference high frequency (Hz) [see RoomHF] |
LFReference | Reference low frequency (Hz) [see RoomLF] |
Diffusion | Echo density in the late reverberation decay |
Density | Modal density in the late reverberation decay |
Please note :
RoomRolloffFactor is a part of I3DL2, but has no effect within FMOD.
As with most reverberation models, the response is split into sections. This implementation has early reflections and late reverberation, each of which are composed of sets of delay lines having different delay and decay characteristics.
There are a few things to note here:
1) Room, RoomHF, RoomLF, Reflections and Reverb are all measured in milliBels, i.e. 100th of a deciBel, and they're all integers.
2) Room is the input gain
3) Reflections is a gain on the output of the early reflections subsystem
4) Reverb is a gain on the output of the late reverb subsystem
5) RoomLF and LFReference control a low frequency shelving filter on the input
6) RoomHF and HFReference control a high frequency shelving filter on the input
7) Diffusion and Density control the correlation among delay lines in the reverb subsystem
The FMOD_PRESET_* presets can be useful as examples of how these parameters change the nature of the reverb. They give quite a wide scope for representing different environments.
One more thing - it's important to distinguish between FMOD_REVERB_PROPERTIES and FMOD_REVERB_CHANNELPROPERTIES. The latter is just used for controlling the a channel's input gain to the reverb, and doesn't affect the characteristics of the reverb unit itself.
Converting FMOD Reverb parameters
Reverb parameters have changed in FMOD Studio. The following table shows how to convert FMOD_REVERB_PROPERTIES values from the FMOD Ex set of properties to the FMOD Studio set.Property | Units | Range | Conversion from previous FMOD Ex properties | Clamp after conversion | Label |
DecayTime | ms | 100 to 20000 | DecayTime * 1000 | No | Reverb Time |
EarlyDelay | ms | 0 to 300 | EarlyDelay * 1000 | No | Early Delay |
LateDelay | ms | 0 to 100 | LateDelay * 1000 | No | Late Delay |
HFReference | Hz | 20 to 20000 | HFReference | No | HF Reference |
HFDecayRatio | % | 0 to 100 | DecayHFRatio * 100 | Yes | HF Decay |
Diffusion | % | 0 to 100 | Diffusion | No | Diffusion |
Density | % | 0 to 100 | Density | No | Density |
LowShelfFrequency | Hz | 20 to 1000 | LFReference | No | Low Freq |
LowShelfGain | dB | -48 to 12 | RoomLF / 100 | Yes | Low Gain |
HighCut | Hz | 20 to 20000 | IF RoomHF < 0 THEN HFReference / sqrt((1-HFGain) / HFGain) ELSE 20000 | Yes | High Cut |
EarlyLateMix | % | 0 to 100 | IF Reflections > -10000 THEN LateEarlyRatio/(LateEarlyRatio + 1) * 100 ELSE 100 | No | Early/Late |
WetLevel | dB | -80 to 20 | 10 * log10(EarlyAndLatePower) + Room / 100 | Yes | Wet Level |
Intermediate variables used in conversion | |||||
LateEarlyRatio | pow(10, (Reverb - Reflections) / 2000) | ||||
EarlyAndLatePower | pow(10, Reflections / 1000) + pow(10, Reverb / 1000) | ||||
HFGain | pow(10, RoomHF / 2000) |