0
0

In the documentation it states that the properties for a FMOD_DSP_SFXREVERB DSP object can be set by using the FMOD_REVERB_PRESETS. However, when looking through the parameters that FMOD_REVERB_PROPERTIES has (which is how you use the presets) I cannot find the fields that are supposed to match up with the fields/properties in FMOD_DSP_SFXREVERB.

FMOD_DSP_SFXREVERB has Dry Level, Room Roll Off Factor, Reflections Level, Diffusion, and a couple more that FMOD_REVERB_PROPERTIES just doesnt have. Also, FMOD_REVERB_PROPERTIES has many more that FMOD_DSP_SFXREVERB does not seem to support.

I’m trying to create and setup the FMOD_DSP_SFXREVERB through System::createDSPByType and DSP::setParameter (using the FMOD_DSP_SFXREVERB enum for the index values of properties), then adding that DSP to a channel using Channel::addDSP but I dont know where to get the actual passed in values for that function since the structure FMOD_REVERB_PROPERTIES does not have matching property fields.

What am I missing ?

Thanks,
Kyle

  • You must to post comments
0
0

hm they match fine.

[code:15jqle6w]
typedef struct FMOD_REVERB_PROPERTIES
{
int Instance; //
int Environment; //
float EnvSize; //
float EnvDiffusion; //
int Room; // FMOD_DSP_SFXREVERB_ROOM
int RoomHF; // FMOD_DSP_SFXREVERB_ROOMHF
int RoomLF; //
float DecayTime; // FMOD_DSP_SFXREVERB_DECAYTIME
float DecayHFRatio; // FMOD_DSP_SFXREVERB_DECAYHFRATIO
float DecayLFRatio; //
int Reflections; // FMOD_DSP_SFXREVERB_REFLECTIONSLEVEL
float ReflectionsDelay; // FMOD_DSP_SFXREVERB_REFLECTIONSDELAY
float ReflectionsPan[3]; //
int Reverb; // FMOD_DSP_SFXREVERB_REVERBLEVEL
float ReverbDelay; // FMOD_DSP_SFXREVERB_REVERBDELAY
float ReverbPan[3]; //
float EchoTime; //
float EchoDepth; //
float ModulationTime; //
float ModulationDepth; //
float AirAbsorptionHF; //
float HFReference; // FMOD_DSP_SFXREVERB_HFREFERENCE
float LFReference; //
float RoomRolloffFactor; // FMOD_DSP_SFXREVERB_ROOMROLLOFFFACTOR
float Diffusion; // FMOD_DSP_SFXREVERB_DIFFUSION
float Density; // FMOD_DSP_SFXREVERB_DENSITY
unsigned int Flags; //
} FMOD_REVERB_PROPERTIES;
[/code:15jqle6w]

  • You must to post comments
0
0

Good to know that its just me being a n00b.

Thanks,
Kyle

  • You must to post comments
0
0

[quote="werlkjh":23pj1mh8]In the documentation it states that the properties for a FMOD_DSP_SFXREVERB DSP object can be set by using the FMOD_REVERB_PRESETS.[/quote:23pj1mh8]
This confuses me also, but in a different way. It seems to contradict the documentation for FMOD_REVERB_PROPERTIES (the typedef for the FMOD_REVERB_PRESETS definitions), which states that all members except "Room" are ignored for the FMOD_SOFTWARE mixer.

Even if I do [b:23pj1mh8]createDSPByType(FMOD_DSP_TYPE_SFXREVERB, &myreverb)[/b:23pj1mh8] then I don’t see how the API lets me make use of FMOD_REVERB_PRESETS. I must set its parameters with [b:23pj1mh8]myreverb->setParameter(), [/b:23pj1mh8]right?

The only function that accepts FMOD_REVERB_PROPERTIES is [b:23pj1mh8]System::setReverbProperties[/b:23pj1mh8], whose behavior isn’t clear for FMOD_SOFTWARE. Is there some global reverb created for me? If so, where does it sit in the mix chain? Or is there instead some way to instruct FMOD to use [b:23pj1mh8]myreverb[/b:23pj1mh8] as created above as the recipient for setReverbProperties calls?

(Version 4.06.12 stable)

  • You must to post comments
0
0

I’ve done a lot of hard looking at this, and this is what I’ve found:

You can get reverb on your samples in two different ways:
1) System => Use System::setReverbProperties
2) DSP => Use a FMOD_DSP_SFXREVERB and setParameters on it.

Both sound really good now with the latest dev release.

To disable reverb on a channel, you will:
1) System => Set the channel reverb properties and set the room parameter to -10000.
2) DSP => Set the DSP on it’s own channelgroup instead of the master channelgroup, then play the channels with reverb on that channelgroup. The rest on the master channel group gets no reverb applied.

Dry/Wet signal ratio:
1) System => Can be set per channel by modifying the channels reverb properties.
2) DSP => Can be set for the DSP, affecting all channels using the same channel gropu. The sfxreverb dsp does not read or use the channel reverb properties in any way.

I’d wish that it was possible to have the SFXREVERB_DSP use the channel reverb properties, or at least some property that could be used to specify per channel dry/wet mix.

As it is now, I’ll always go with the system reverb approach. It works great as far as I’ve tested it.

  • You must to post comments
0
0

jornj,

Well stated, it is indeed clear that there are two approaches one could take, though it remains a mystery why the documentation suggests that a structure from one (FMOD_REVERB_PRESETS) can be used with the other (FMOD_DSP_SFXREVERB). I am also still curious whether the System approach works with FMOD_SOFTWARE, and if so, how high "FMOD_REVERB_PROPERTIES.Instance" may go when used with FMOD_SOFTWARE — how many software reverbs are allocated.

I offer you in return the suggestion that Wet/Dry per channel is achievable with the DSP approach by dual-routing your channel to both channelgroups, and setting the "Dry" DSP parameter to 0. This experimental code of mine seemed to work just fine:
[code:2pjzvklr]channel->getDSPHead(&head);
masterGroup->getDSPHead(&master);
master->addInput(head);
dspreverb->addInput(head);

head->setOutputMix(0, dry);
head->setOutputMix(1, wet);[/code:2pjzvklr]

  • You must to post comments
0
0

[quote="jornj":eqyd4f2w]
I’d wish that it was possible to have the SFXREVERB_DSP use the channel reverb properties, or at least some property that could be used to specify per channel dry/wet mix.
[/quote:eqyd4f2w]

As an SFXREVERB_DSP unit can be placed anywhere in the DSP mixing network, channels are absolutely meaningless to it. Thats what the System API and Channel API is for. It wraps the dsp and manages that stuff for you.

  • You must to post comments
Showing 6 results
Your Answer

Please first to submit.