Audible difference between global reverb and inserted SFXREVERB with same parameters


#1

I’m experimenting with FMOD’s SFX reverb unit to decide which algorithm I’d use for my game.
The reverb itself works great, but I noticed a significant difference between the following 2 implementations. Can anybody explain why this happens?
I’m using the C API as a quick test.
(1) Enable FMOD’s global reverb:
//This sounds awesome
FMOD_REVERB_PROPERTIES prop2 = FMOD_PRESET_AUDITORIUM;
prop2.WetLevel=-28.0f;
FMOD_System_SetReverbProperties(system,0,&prop2);

(2) Insert the SFXREVERB DSP unit with the same attributes into the master channelGroup:
//literally, the wet signal significantly decreases regardless of the same condition as the first one
ret=FMOD_System_CreateDSPByType(system,FMOD_DSP_TYPE_SFXREVERB,&hReverb);
FMOD_REVERB_PROPERTIES prop2 = FMOD_PRESET_AUDITORIUM;
prop2.WetLevel=-28.0f;
ret=FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_DECAYTIME,prop2.DecayTime);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_EARLYDELAY,prop2.EarlyDelay);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_LATEDELAY,prop2.LateDelay);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_HFREFERENCE,prop2.HFReference);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_HFDECAYRATIO,prop2.HFDecayRatio);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_DIFFUSION,prop2.Diffusion);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_DENSITY,prop2.Density);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_LOWSHELFFREQUENCY,prop2.LowShelfFrequency);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_LOWSHELFGAIN,prop2.LowShelfGain);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_HIGHCUT,prop2.HighCut);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_EARLYLATEMIX,prop2.EarlyLateMix);
FMOD_DSP_SetParameterFloat(hReverb,FMOD_DSP_SFXREVERB_WETLEVEL,prop2.WetLevel);
//Don’t touch DRYLEVEL, since the reference states that its default is 0.0f
FMOD_CHANNELGROUP *master;
ret=FMOD_System_GetMasterChannelGroup(system,&master);
ret=FMOD_ChannelGroup_AddDSP(master,FMOD_CHANNELCONTROL_DSP_TAIL,hReverb);


#2

I’m using one of the spatializer plugins for each sub-channelGroup. My assumption is the order that the signal is passed through the plugin and global reverb.
The master channelGroup receives all inputs from children, then applies the reverb effect. In this case, the signal flow is raw->spatialized->mixed->reverb. However, the global reverb might be working differently.
If each sub-channelGroup first sends the signal to the global reverb before the spatializer plugin, the signal flow can be different one (raw->reverb applied->spatialized->mixed). Does anyone know about the specifics of the global reverb tyming?
Is the global reverb applied


#3

Hi nyanchan

To match the built in reverb you should set the dry level to -80.0f.

Cheers
Derek