fluid-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[fluid-dev] Supporting different reverb engines


From: Tom M.
Subject: [fluid-dev] Supporting different reverb engines
Date: Thu, 26 May 2022 14:33:34 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0

Would it make sense for fluidsynth to implement different reverb engines?

I recently came across a Lexicon 224 reverbator, which I quite like. To my ears 
it sounds better than the FDN reverbator which fluidsynth currently implements. 
Now, I don't want to go through the discussion of changing our default reverb 
engine again, as fluidsynth has just changed it in 2.1.0 from freeverb to FDN. 
But I would really like to hear fluidsynth's output with the Lexicon 224. So, I 
do wonder how this could be implemented. I see three possible options:

1) Extend synth.reverb.active from boolean to an enum integer, to allow 
selecting different reverb engines when the synth is created.

2) Write a LADSPA plugin that implements a Lexicon 224 and can be hooked up by 
fluidsynth.

3) Render dry audio from the synth and manually post-process it in my own MIDI 
player.


Option 1) would allow to also re-add support for the freeverb engine, which we 
dropped in 2.1.0 (in case anybody misses it). It would also allow to simply 
read the reverb-send level from fluidsynth's internal buffer setup and apply it 
to the correct rvoice buffer on-the-fly (potentially parallelized for 
multi-channel output in the future). Reverb related fluidsettings, like 
roomsize, level, etc, could be respected as well. On the other hand, one might 
argue that fluidsynth should not serve as playground for various sound effects. 
Other people might come and want their reverbators, chorus engines, etc. 
implemented in fluidsynth.

Option 2) seems like the most generic approach. I just don't know if it would 
be possible to correctly apply the reverb-send level to the individual LADSPA 
buffers (i.e. MIDI channels) on-the-fly. Looking at our API there is a function 
fluid_ladspa_effect_set_control() which might be usable for this use-case. But 
I'm afraid supporting settings like roomsize, level, etc. would not be possible 
(even though I could live without it).

Obviously option 3) would be my fallback. I would use fluid_synth_process() to 
render a dry, multi-channel output from the synth and apply the Lexicon reverb 
as post processing step in synth-context, by using fluid_synth_get_gen() to 
read the GEN_REVERBSEND for every MIDI channel.


Any opinions on that?

Tom




reply via email to

[Prev in Thread] Current Thread [Next in Thread]