[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 #6
From: |
Elimar Green |
Subject: |
Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65) |
Date: |
Thu, 5 Aug 2010 21:57:13 -0700 |
On Wed, Aug 4, 2010 at 2:31 PM, Pedro Lopez-Cabanillas
<address@hidden> wrote:
> On Wednesday, August 4, 2010, David Henningsson wrote:
>> 2010-08-03 22:48, Pedro Lopez-Cabanillas skrev:
>> > [Sorry, this is a bit long...]
>>
>> I'm glad you took the time to sort it out!
I second that. Thanks for taking the time to explain it better. I
now get what the issue is.
>
> No, MSB and LSB are CC messages that come in any order. The restriction is
> that the CCs must be received before the Program Change, and are only applied
> at that moment. In other words: sending bank select messages without a
> Program Change has no effect, in any of my MIDI hardware instruments.
> FluidSynth should behave the same.
>
>> > SF2 (SoundFont) files (like GeneralUser, FluidR3,...) have bank numbers <
>> > 127 for melodic sounds and 128 for Drum kits, as recommended by the
>> > SoundFont specification [5]. It is necessary to map the MIDI Bank Select
>> > numbers to the SF2 bank numbers, because they won't always match. The sf2
>> > spec says that "The special case of a General MIDI percussion bank is
>> > handled conventionally by a wBank value of 128. 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."
>
> 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. If I
remember correctly, the actual quantity in a SoundFont file is a 16
bit number for bank. So theoretically you could assign any 16 bit
quantity as a bank number in a SoundFont file, though I would guess it
only really makes sense to limit it to a 14 bit quantity if you want
to actually be able to select it using standard MIDI messages.
>> > "Compatibility mode" with the following rules, if we don't know which
>> > standard to follow: 1. If MSB is received alone, or with LSB=0, then use
>> > MSB as the soundfont bank number. This is probably going to work with
>> > most GS songs.
>> > 2. If LSB is received alone, or with MSB=0, then use LSB as the soundfont
>> > bank number. This is probably going to work with most XG songs.
>> > In any other case, we need to know if the song/player follows the GM, GS
>> > or XG standards, either when a SYX message is received, or with a
>> > setting.
>> >
>> > The proposal is that this "Compatibility mode" should be the default.
>>
>> So, how about:
>>
>> banknum = LSB == 0 ? MSB : MSB*128 + LSB ?
>
> banknum can be a number from 0 thru 16383 from that formula, 14 bits.
> The bank number from standard compliant SF2 files is a number from 0 to 127, 7
> bits. You can't match SF2 bank numbers with your banknum.
>
> If you want to be compatible with most SF2 files, you need to avoid the
> formula (MSB*128 + LSB) completely.
>
>> ...regardless of order received? That way, 1. and 2. work as you
>> suggest, and "any other case" works as before - I believe, both as 1.1.0
>> and 1.0.9 worked, right?
>
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.
> 1.1.0 was totally broken for bank select messages.
>
> Regards,
> Pedro
>
Cheers!
Elimar
- [fluid-dev] Re: Son of ticket #65, Pedro Lopez-Cabanillas, 2010/08/01
- Re: [fluid-dev] Re: Son of ticket #65, David Henningsson, 2010/08/01
- Re: [fluid-dev] Re: Son of ticket #65, S. Christian Collins, 2010/08/01
- Re: [fluid-dev] Re: Son of ticket #65, Elimar Green, 2010/08/01
- Re: Re: [fluid-dev] Re: Son of ticket #65, Bernd Casper, 2010/08/02
- Re: [fluid-dev] Re: Son of ticket #65, S. Christian Collins, 2010/08/02
- MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Pedro Lopez-Cabanillas, 2010/08/03
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), David Henningsson, 2010/08/04
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Pedro Lopez-Cabanillas, 2010/08/04
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65),
Elimar Green <=
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Pedro Lopez-Cabanillas, 2010/08/06
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Elimar Green, 2010/08/06
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), S. Christian Collins, 2010/08/06
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Pedro Lopez-Cabanillas, 2010/08/06
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), S. Christian Collins, 2010/08/06
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Pedro Lopez-Cabanillas, 2010/08/08
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), David Henningsson, 2010/08/08
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Pedro Lopez-Cabanillas, 2010/08/08
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), David Henningsson, 2010/08/09
- Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65), Pedro Lopez-Cabanillas, 2010/08/09