On Thu, Aug 5, 2010 at 10:52 PM, Pedro Lopez-Cabanillas
On Friday, August 6, 2010, Elimar Green wrote:
I want to remark the above quotation from the SF2 specification. SF2 bank
numbers for melodic channels are numbers in the range 0 to 127, 7 bits.
That is only for General MIDI (GM) compatibility though.
No. General MIDI (GM) doesn't use banks, CC#0 and CC#32 are ignored in GM mode
by all standards compliant devices.
Ahh right.. I overlooked that, because of the way its worded in the
spec. Erroneously I was thinking that the statement
"If the value in either field is not a valid MIDI value of zero
through 127, or 128 for wBank, the preset cannot be played but should
be maintained." applied to the statement "The special case of a
It seems like the combination of bank LSB/MSB CC messages does
theoretically support a 14 bit bank number though, so I think the
assumption in FluidSynth has been to support that (even in releases
prior to 1.1.1). I don't think supporting an extended bank range
hurts anything, provided the other cases are interpreted correctly.
Although it may lead some SoundFont authors to think that its OK to
have presets with banks above 128.
I think it actually needs to work a bit differently from what you both
described. It should be done as it was in 1.0.9. There was a bit of
overhauling for 1.1.0 and I think the bank behavior got
unintentionally changed, by yours truly.
The previous behavior worked as so (from examining the 1.0.9 code base):
- Each channel keeps track of the last MSB value and the current BANK value
- If an MSB is received: MSB = value and BANK = value
- If an LSB is received: BANK = MSB * 128 + LSB
That should do the trick and work in most MIDI modes, minus the GM
mode where bank selection should be ignored.
In FS-1.0.9 and in your proposal above, XG mode is not handled correctly: MSB
should be ignored. And for GS mode, when LSB is received the value should be
ignored as well.
Would you normally get those messages when in those MIDI modes? Did
1.0.9 not work properly in those cases? Until we implement the
concept of FluidSynth being in a particular MIDI mode (which I had
hacked together at one point, but then removed since it wasn't
complete), we want to find a general case which works for the most
part. As I described it above, is as it was in 1.0.9.
fluid-dev mailing list