[Top][All Lists]

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

Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65

From: S. Christian Collins
Subject: Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65)
Date: Fri, 06 Aug 2010 13:03:39 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv: Gecko/20100713 Lightning/1.0b1 Thunderbird/3.0.6

I had no complaints with how bank selects worked in 1.0.9--it's exactly the same way my SoundFont-compatible Audigy hardware works.  I don't see the need to support XG mode when the SoundFont standard doesn't really use that mode at all.  There is a lot more that goes into XG-compatibility than the way banks are selected.


On 08/06/2010 12:24 PM, Elimar Green wrote:
On Thu, Aug 5, 2010 at 10:52 PM, Pedro Lopez-Cabanillas
<address@hidden> wrote:
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
General MIDI..".

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


reply via email to

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