When adding a DSP of type FMOD_DSP_TYPE_SFXREVERB to the system, and calling setParameter with the parameters from FMOD_PRESET_OFF, the sound goes silent, as if the dry mix isn’t being heard. This has only started happening recently (upgrading from 4.9.8 to 4.11.0 I think) and I noticed this comment in a recent changelist.

"PS3 – Fixed dry mix not being heard when using system reverb."

Is it possible that there’s a problem with using the FMOD_PRESET_OFF in a similar way, or has there been a change in the way the PRESET_OFF works (i.e. it does mean apply no reverb)? This is on PC using 4.11.02, and using other presets seems to work fine.

  • You must to post comments

Hi ,
DSPI doesn’t support presets, so if you are setting the parameter’s manually using the preset values, make sure you set the Dry level properly.

if (1)
FMOD::DSP *dspreverb;
FMOD::ChannelGroup *cg;

    result = system->createDSPByType(FMOD_DSP_TYPE_SFXREVERB, &dspreverb);

/* Inst Env Size Diffus Room RoomHF RmLF DecTm DecHF DecLF Refl RefDel RefPan Revb RevDel ReverbPan EchoTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff Diffus Densty FLAGS */
//#define FMOD_PRESET_OFF { 0, -1, 7.5f, 1.00f, -10000, -10000, 0, 1.00f, 1.00f, 1.0f, -2602, 0.007f, { 0.0f,0.0f,0.0f }, 200, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 0.0f, 0.0f, 0x33f }

if 0

    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_DRYLEVEL, 0.0f);          ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_ROOM, 0.0f);              ERRCHECK(result);


    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_DRYLEVEL, 0.0f);          ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_ROOM, -10000.0f);             ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_ROOMHF, -10000.0f);           ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_ROOMROLLOFFFACTOR, 0.0f);     ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_DECAYTIME, 1.00f);            ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_DECAYHFRATIO, 1.00f);         ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_REFLECTIONSLEVEL, -2602.0f); ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_REFLECTIONSDELAY, 0.007f);    ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_REVERBLEVEL, 200.0f);         ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_REVERBDELAY, 0.011f);         ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_DIFFUSION, 0.0f);             ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_DENSITY, 0.0f);           ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_HFREFERENCE, 5000.0f);        ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_ROOMLF, 0.0f);                ERRCHECK(result);
    result = dspreverb->setParameter(FMOD_DSP_SFXREVERB_LFREFERENCE, 250.0f);         ERRCHECK(result);


    result = eventsystem->getCategory("master", &eventcategory);

    result = eventcategory->getChannelGroup(&cg);

    result = cg->addDSP(dspreverb);


Your dry level is probably at it’s default, which is -10,000 but has mistakenly been reported in the docs as 0. I think we’ll make it default to 0 instead of -10,000 thanks for the heads up.

  • You must to post comments

Yeah, that was it Brett, I was just copying the appropriate FMOD_REVERB_PROPERTIES properties across, but wasn’t setting FMOD_DSP_SFXREVERB_DRYLEVEL. Thanks!

  • You must to post comments

A few defaults changed and new parameters have been added in the past , this was possibly related to why it didn’t work. Good to see it is working now.

Also note the most efficient way to simulate a ‘preset off’ is to call DSPI::setByPass(true);

  • You must to post comments
Showing 3 results
Your Answer

Please first to submit.