JohnK wrote on 2020-09-16, 06:11:Hi, […]
Show full quote
Hi,
This is my first post and view on this forum, so not sure about how it all works together. So sorry if I get something out of place.
I use BassMidiVSTi within Cakewalk as my DAW. It is the best Soundfont VSTi player I have found. However, I think the implementation of bank select within a SoundFont is not quite right.
Currently, to select different banks within a soundfont, I have to issue the corresponding bank as an MSB The LSB is ignored. However, in a copy of the SoundFont specifications published by EMU, the bank select is via LSB, and not MSB.
In the doc, it says:
"MIDI CC32 Bank Select LSB - When received, may behave in conjunction with CC0 Bank Select to provide a total of
16384 possible MIDI banks of programs."
Hi,
First of all, if we quote from specification it's not fair to cherry pick parts that seem to agree with our desires 😀 In Soundfont specification 2.4 you will also find the following (before your quoted part):
"MIDI CC0 Bank Select - When received, the following program change should select the MIDI program in this bank value
instead of the default bank of 0. "
and just after this:
"MIDI CC32 Bank Select LSB - When received, may behave in conjunction with CC0 Bank Select to provide a total of
16384 possible MIDI banks of programs."
In case of CC#32 the emphasis is on the MAY while in case of CC0 there is no MAY. So I do not understand how you could infer from this info that 'in the SoundFont specifications published by EMU, the bank select is via LSB, and not MSB.' This is simply not true (according to specification).
Moreover historical fact is that the implementers of this specification (namely E-MU and later Creative) never implemented Bank LSB in their devices. All the HW devices that used Soundfonts always used only Bank MSB addressing. So they took that 'MAY' very seriously. Bassmidi VSTi is retro oriented in the sense that it wants to emulate the behavior of the once so popular Soundbalster AWE/Live/Audugy/X-Fi series devices since most Soundfont + Midi pairs created in this era expect this behavior. Here are some for download that you can inspect how they work (Hint: They all use Bank MSB 1 to address variation tones , and expect a full GM soundfont as Capital tones at Bank MSB 0):
download/file.php?id=39958
The attachment cc0.jpg is no longer available
The attachment mma.jpg is no longer available
The attachment msblsb.jpg is no longer available
( The above pictures show the Audigy2 ZS Soundfont bank manager. The other options namely MMA and MSM+LSB also do NOT change the addressing mode, they just change how indexes are displayed! And as you can see, Banks are always addressed by MSB )
JohnK wrote on 2020-09-16, 06:11:
However, BassMidiVSTi only uses the MSB, so is limited to only 128 banks; each with up to 128 presets.
If you read the specification you can also find that 128 Banks and 128 presets are both part of the specification (regardless if Bank LSB may be used or not) :
"The WORD wPreset contains the MIDI Preset Number and the WORD wBank contains the MIDI Bank Number which
apply to this preset.. […]
Show full quote
"The WORD wPreset contains the MIDI Preset Number and the WORD wBank contains the MIDI Bank Number which
apply to this preset...
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."
So according to specification the wBank value is limited to 0-127 and the special value of 128 for drums. Historically you can address the normal instrument banks via Bank MSB but even theoretically adding Bank LSB support would not change the fact that only 128 + 1 banks are possible in SF2 soundfonts. In existing soundfont devices made by E-MU and Creative the special bank of 128 is always available at channel 10 (drum channel) as specified by GM and also mentioned by the above quote. Thus in these devices there is no need for full MSB+LSB addressing. Normal instrument banks are addressed by Bank MSB (0-127) and the special drum bank 128 is always available at channel 10.
However, BassMidiVSTi only uses the MSB, so is limited to only 128 banks; each with up to 128 presets. The above from the doc is clear that the LSB is used to move up a single bank (0 to 127) and the MSB to jump up 128 banks and hence 128*128=16384 banks, as stated in the SoundFont documentation. Since BassMIDIVsti is only using MSB (and using it as an LSB), it is limited to only 128 banks.
Just as the specification states, and E-MU&Creative implementations do.
To illustrate the issue further with a practical example, most GM Soundfonts have drum presets in bank 128 (ie MSB=1 & LSB=0). However, since BassMidiVsti can only set the MSB (and uses it as the LSB), you can thereby only access banks 0-127. You can not get to bank 128, so I cannot access the drum bank; except by using MIDI channel 10. However, i should be able to set any of the MIDI channels to a drum preset. And furthermore, in a Soundfont I should able to set two different MIDI channels to two different Drum presets.
Or am I using it wrong? and there is a way to set channel 1 to bank 128?
Yes, you are doing it wrong 😀 As I stated above Bank addressing is programmed exactly as implemented by existing HW devices and this is the most compatible one. No existing Soundont device uses the addressing scheme of MSB=1 & LSB=0 to access drums.
But in case of Bassmidi VSTi you can use 3 other methods to set any other channel besides channel 10 to be a drum channel. And none of them breaks compatibility with existing HW devices ( that could not do this but always use channel 10 for drums).
1. Set Midi System in Bassmidi VSTi to GS. Then you can use GS standard SysEx messages to set any channel as Drum channel. This is the hardest way so I do not recommend it, but works.
2. Set Midi System in Bassmidi VSTi to XG. Then as standard feature in XG you can set any channel to drum channel by setting Bank MSB to 127.
3. Set Midi System in Bassmidi VSTi to GM2. Then as standard feature in GM2 you can set any channel to drum channel by setting Bank MSB to 120.
That's it 😀
( You can set Midi System in Bassmidi VSTi 2 ways. On one hand it is exposed as a standard VST parameter so you can set it in your DAW, or the other hand you can right click the first aid like 'Reset' button on the right hand side of the interface and select your desired Midi System.)