I'm just coming to terms with how to send commands to FluidSynth to control
things like reverb (specifically, I want to control reverb).

I'm under the impression that while a few things can be controlled from the
command-line (such as gain), most things (such as reverb) cannot be. There
are a few other ways to control these things:

- Using the interactive shell, you can type in commands manually.
- You can also use Unix pipes to send the same shell commands (e.g., 'echo
"rev_setlevel 10" | fluidsynth' or 'fluidsynth < commands.txt').*
- Using -s, FluidSynth listens for TCP connections and accepts the same
shell commands via network input.
- Using the API, you can programmatically change the settings.
- Graphically using QSynth (which I imagine uses the API).

*Note this was mentioned earlier this year by David:
http://lists.gnu.org/archive/html/fluid-dev/2011-03/msg00036.html

Any that I missed?

The problem is that none of these methods seem to work in conjunction with
the -F fast renderer feature. -F is a way to tell FluidSynth "forget about
TCP servers, MIDI servers, output devices, command shells, etc -- just
convert a MIDI input into a digital audio file as fast as you can and
quit." Which is a fantastic feature -- I have makefiles set up so that I
can just go "make" and FluidSynth renders all of my music (it's one thing I
love about FluidSynth as it lets me export all of my music with a single
command).

The problem is that as far as I can tell, ALL of the above options for
changing settings require that you are running FluidSynth either in server
mode or via the API, which means they are incompatible with -F. In fact, I
can't find a way to change reverb when using the fast renderer at all. Note
that I have tried using -F and not -i, and piping a text file in to stdin,
but FluidSynth seems to ignore stdin when -F is supplied. Is there a way?

The only way I can think of is only available to me because I've hacked on
FluidSynth in the past:

- Edit include/fluidsynth/synth.h FLUID_REVERB_DEFAULT_LEVEL and friends
and recompile the program.

Obviously not the cleanest solution :) As I am coming up on a deadline, if
there is no simple solution, I'll do that for now. But in the future, I
would like to propose a feature (which I'm willing to work on) where you
can specify on the command-line:

--settings <settings-file>

This would read in <settings-file> and execute it as if it was supplied to
stdin, but it would always work (even when FS refuses to read from stdin,
such as with -F). This should be pretty trivial to implement, I would
imagine.

Matt
_______________________________________________
fluid-dev mailing list
fluid-dev@nongnu.org
https://lists.nongnu.org/mailman/listinfo/fluid-dev

Reply via email to