Just to clarify, note durations wouldn't be extended if they were
already long enough--we'd simply be setting a minimum possible note
duration (8-10 ms) to allow the note to get through the attack phase.
As far as I can tell from my testing in the past, this appears to be
similar to the technique that Creative uses in their SoundFont playback
engine, because I can't find any evidence that they are ever ignoring
I believe my idea solves the drums-not-sounding problem without
creating any new ones. It completely solves the headache of "which
notes do we still need note-offs for", it eliminates the risk of
possible "stuck" notes. It can be used for GM/GS/XG, whatever. I
would even say that you could use this technique by default regardless
of whether GM/GS mode is enabled or not, because there are *no* adverse
effects. Only benefits.
The only case in which this wouldn't work is if the SoundFont designer
foolishly created percussion sounds with no release phase (very
uncommon AFAIK), in which case FluidSynth should not have to
accommodate for bad preset design.
Quoting "S. Christian Collins"
I think your resolution is reasonable, and it seems it will only really
affect GM/GS MIDI files, and not other usage, so that's good.
The reason I brought up the GS sound effects bank (patch 56 on the
percussion channel, if memory serves me correctly) is that many of the
sounds are looped, and would respond badly to having no note-off event,
essentially leaving them looping indefinitely throughout the song.
Also, there are a few other exceptions in the GS percussive presets
that could cause problems, such as the different order of percussion
sounds in some of the patches. Examples include the Orchestral bank
(patch 48), which includes a sustained applause sound effect as one of
its notes, and the brushed kit, which has brush swirls that should
respond to length.
This is why I proposed simply setting a minimum note length value for
the percussion channel in GM/GS mode. If you set the minimum note
length to 10ms, for example, that would cause all percussion
instruments to sound properly--short sounds will play their duration
because of the long release values SoundFont creators use on such
sounds, and long sounds won't hold out indefinitely due to a lack of
note-off. I can't think of any downsides to this solution.
Your concerns bring up the question as to what the standard is in
regards to percussion for GS, which I admit I was overlooking. GS is
an extension to GM, but the statement about ignoring percussion
note-offs was in a GM standard document. This means that there are
likely additional rules for the extended sounds/patches in the GS
instrument map. I'm not sure if there is a specific definition, in
regards to GS and percussion instrument note-offs, but if someone knows
of a document describing this, that would be helpful. I found mention
on the net that there are SYSEX messages for turning on/off the
handling of note-off messages, though I haven't found a direct
reference to the particular SYSEX message yet, except perhaps one that
designates which channels are Percussion channels, documented in the
manual for the SC-8850 here:
I suppose I don't really like the idea of extending the note length by
a specific amount, simply because there isn't anything that says we
should do it that way. Checking to see if it works properly would
require testing many MIDI files, etc. The amount of the note extension
would affect the result as well. Perhaps we should limit the note-off
ignore logic to just the Standard drum kit and other kits which are
based on it. An additional thing we could add, is to always handle
note-offs for looped instruments.
I'd like to try and resolve the missing percussion notes issue and at
the same time not introduce any other problems. We can start
perfecting the GM/GS handling in future versions.