I had a brief look over TiMidity++ code. The license is GPL and
therefore not compatible with FluidSynth, so its just for reference..
I have up until now not really looked much at TiMidity++. It looks
really powerful and seems to emulate tons of different synthesizer
modules and what not. I don't think we should even try to compete in
that area with it! The number of processed SYSEX messages is
enormous. FluidSynth probably has its own niche, though I'm not
really sure what exactly it is, perhaps someone else has a better
overview of both of them. FluidSynth is embeddable and probably a lot
simpler. I think we should focus on it being a good general purpose
SoundFont synthesizer, but not get too bogged down in faithfully
synthesizing every MIDI file out there.
At any rate. It seems that it has a mode parameter, such as we have
been discussing, as well as a percussion channel map. Note-offs are
indeed ignored for non-looped percussion instruments. If that is the
proper behavior with GM/GS, I think we should follow it, but only if
GM or GS mode is enabled.
I'm not really interested in getting too involved in the whole
GM/GS/XG mess. Because it is indeed a mess and I'd much rather move
on to more interesting tasks :)
Quoting David Henningsson <launchpad....@epost.diwic.se>:
S. Christian Collins skrev:
My 2 cents: I'm pretty sure the Creative synths don't ignore note-off,
and I don't think it's necessary, because this should be taken care of
in the SoundFont design, IMO. In the SoundFont's percussion bank, the
release phase of each sample allows the drum to be sustained even when
the note is released very quickly, and this is how GeneralUser GS and
pretty much every other GM bank behaves.
As I said in a comment to http://fluidsynth.resonance.org/trac/ticket/1
, the problem is that we never get through the attack phase. So I still
think delaying the note-off could be a good workaround. But Christian
could perhaps suggest a good default value for the delay?
I don't really like that solution, since it isn't really the defined
behavior for GM/GS and the delay would be awkward to get right with
different SoundFont files.
Perhaps something like this would be adequate:
midi.mode = raw, gm, no-off-percuss
raw: Don't do any special percussion channel handling
gm: Ignore note-offs for all but fast Whistle and Guiro on percussion
channel
no-off-percuss: Ignore all note-offs on percussion channel
Assuming midi.mode (or better, synth.midi-mode) will be used to change
between gm, gs, xg etc, it does not make sense to add no-off-percuss to
that series since it might control more things (e g ignore bank
selection in GM mode).
Better to use a separate setting for this problem then, something like
synth.note-off-percuss=delay/ignore/process. And for now, hardcode
percussion channel to 10 (as already done in a few places).
Yeah, true. I started off having it just be a value for something
like note-off-percuss, but changed it when I started to consider a
MIDI mode parameter as a good idea, which is the reason why it was a
little convoluted. Lets just add a synth.midi-mode parameter with the
options: plain, gm, gs and xg and SYSEX message handling for entering
and exiting those modes. We should perhaps have a way for the user to
override the mode though and not allow SYSEX changes.
// David
Josh
_______________________________________________
fluid-dev mailing list
fluid-dev@nongnu.org
http://lists.nongnu.org/mailman/listinfo/fluid-dev