It seems soundfont management logic + different midi systems is not an easy subject and implementing the 'Use Bank LSB' option h […]
It seems soundfont management logic + different midi systems is not an easy subject and implementing the 'Use Bank LSB' option have not made it easier.
Usually simple playback with only a default soundfont (placed at bank 0) is not a problem.
By default bassmidi similarly to most GS devices and SB hardware simply does not use/ignores the Bank LSB value. And if it meets a Bank MSB + program combination that does not exist it uses its Capital Tone Fallback (CTF) mechanism and simply use the given instrument at Program + Bank 0.
(If you want to see the result of CTF and so want to see the used program +bank combination instead of the real bank values the file sends, you can enable ‘Main menu -> Intruments -> Use Patch Info for Capital Tone Fallback’ in Midiplayer. https://www.youtube.com/watch?v=PrKfDTjvKDs)
But let’s see how soundfont management works in Midiplayer (up to 4.7). It works the exact same way as SB series soundfont manager (sfman32). Let me repeat it: Bank LSB does not play. Bank is equivalent to Bank MSB value. (according to this in Midiplayer up to 4.7 and in Midiplayer 4.8 if ‘Use bank LSB’ is not selected Ctrl + x always sets Bank MSB value never bank LSB.)
Bank 0 is supposed to be the main GM compatible bank, and other additional soundfonts to be the variations. In case of SB hardware it was never meant to place full GM/GS implementations on different banks. It is possible, but later banks overwrite overlapping presets. An example:
1. You load a default full GS soundfont at bank 0. Therefore at bank 0 program 127 you have the Gun Shot instrument, and at Bank 1 program 127 you have the Machine Gun instrument.
2. If you load another full GM/GS soundfont at Bank 1 you will have the 1st soundfont’s macine Gun instrument at Bank 0 program 127, but at Bank 1 program 127 you will have the 2nd soundfont’s Gun Shot instrument. 1st soundfont’s Machine Gun has been overwritten. Notice: bank number behaves as an offset. The 2nd soundfont’s bank 0 will be available at bank 1, bank 1 at bank 2 and so on.
To overcome this preset overlapping problem I have added the ‘Use Bank LSB’ option to MidiPlayer 4.8. If it is selected Ctrl + x always sets the Bank LSB value. This method is unique and is not available in any hardware soundfont implementation. Instead of imitating the SB hardware’s soundfont management this method is more similar to later GS implementation’s Map changing method (SC-8820/8850). Each additional full GM/GS soundfont can be considered as a complete GS map (like SC-55, SC-88 Maps in SC-8820).
And these maps can be selected by Bank LSB. And this way the variation banks in each Soundfonts can be selected by Bank MSB since they do not overlap each other.
But there was a little problem with Bassmidi’s default CTF behavior that required some workarounds. Namely by default Bassmidi always falls back to Bank MSB/LSB 0 if it does not find an exact match at the given Bank LSB + Bank MSB + Program combination. Thus it leaves the Domain of the selected Map/Soundfont by Bank LSB. This behavior is not good when you want to test a soundfont and the midi file tries to use a bank MSB + Program combination that does not exist in the soundfont selected by the Bank LSB value. So if such a situation occurs MidiPlayer resets the Bank MSB value to 0 and thus falls back to the Capital Tone Bank of the selected soundfont. So in case of ‘Use Bank LSB’ this effect result in a different program name and bank MSB value display than in 'Bank MSB mode' in case of non-existent Bank MSB + program combinations.
I hope this makes it more clear but Midi itself, different Midi systems and soundfont management are not easy subjects. And you have to gather much information from different places to get a clear picture.