Hi !
I'm the author of (Soudfont) Midi Player.
First and foremost I congratulate to your very useful driver.
If can offer to help your effort to make the best for the midi users of windows systems.
I think at first something should be made with the soundfont stacking implementation since it is not working very well at the moment.
And here is the 'something': a more clever implementation should make it possible to define explicitly to which bank the given soundfont should be loaded. This is the exact way how Soundfont manager from Creative (SFMAN32.dll) worked. I think it is more logical and worked very well for real sound blaster cards.
eg. bank 0: TheMainGMGS.sf2
bank 1: extended1.sf2
bank 100: extended100.sf2
I have noticed in the bassmidi documentation that creators of bassmidi have this exact idea in their mind:
------------
BOOL BASS_MIDI_StreamSetFonts( HSTREAM handle, void *fonts, DWORD count );
typedef struct { HSOUNDFONT font; int preset; int bank; } BASS_MIDI_FONT;
Members
font
Soundfont handle, previously initialized with BASS_MIDI_FontInit.
preset
Preset number... -1 = use all presets in the soundfont. This determines what MIDI_EVENT_PROGRAM event value(s) the soundfont is used for.
bank
Base bank number, or the bank number of the individual preset. This determines what MIDI_EVENT_BANK event value(s) the soundfont is used for.
Remarks
When using an individual preset from a soundfont, BASSMIDI will first look for the exact preset and bank match, but if that is not present, the first preset from the soundfont will be used. This is useful for single preset soundfonts.
When using all presets in a soundfont, the bank member is a base number that is added to the soundfont's banks. For example, if bank=1 then the soundfont's bank 0 becomes bank 1, etc. Negative base numbers are allowed.
------------
Moreover if you can make this improvement and you can make a public interface to interact with your driver, I can rewrite my program to change/load the soundfont banks real time before playing midi files. This would be the same behaviour that SoundFont Manager from Creative (SFMAN32.dll) could do with real sound blaster cards.
If this can be achieved this software solution would be a nearly perfect implementation of what an old SB could do in the (midi) golden era of windows.
Thanks for your attention and best luck for your future works.
Best Regards
Zoltán Bacskó - Falcosoft