fluid-dev
[Top][All Lists]
Advanced

[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 #6


From: Elimar Green
Subject: Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65)
Date: Fri, 6 Aug 2010 10:24:40 -0700

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.


> Regards,
> Pedro
>

Regards,
Elimar



reply via email to

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