Midi Player + VMS

It seems you're using an AdBlocker or JavaScript is disabled!

This sites offers only FREE software and it's supported by a few advertisement boxes (no intrusive popups).

This 10 seconds wait is to let you update your AdBlocker whitelist...

Got it, show me the content...
Please enable JavaScript!


Anonymous user
Midi Player + VMS

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;


Soundfont handle, previously initialized with BASS_MIDI_FontInit.

Preset number... -1 = use all presets in the soundfont. This determines what MIDI_EVENT_PROGRAM event value(s) the soundfont is used for.

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.


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


Posts: 1621
Joined: 25 Mar 2012 - 01:19
Thanks for your suggestions

Hi Zoltán, thanks for your detailed (and technical) post.

Actually parameters preset and bank have fixed values, respectively -1 and 0.
This was the simpler solution to start with and, till now, nobody asked for better management.

The improvement you suggest is not so hard to add and I believe it will be useful to advanced/experienced users.
Actually I'm not working on VMS 1.x anymore; all my time is dedicated to the newer 2.x series (see into comments and FAQ for details).
So I'm going to add it to 2.x and not backporting the new feature to 1.x.
Just to be sure I well understood the request: do both preset and bank should be configurable or only the latter?

Your second request is not so simple as the first one.
The only interface to VMS is the opened MIDI channel to it.
Being the driver a DLL it doesn't have its own process so opening sockets, pipes or IPC channels is not so easy. At user's (and antivirus/firewall/...) eyes it seems that the client MIDI app is trying to do these actions.

Next 2.x version will be architecturally different; synth will reside into its own EXE (see into comments and FAQ for details) so I could think to add some kind of API for external management.
Stay tuned...

Anonymous user
Re:Thanks for your suggestions

thank you for considering with my suggestions.

For me explicit bank configuration would be enough, but the more options the better.

Regarding the new API I would suggest a language independent interface eg. COM/OLE Automation (against a pure C API).
Being your driver a windows only solution there are no drawbacks of using this.

I'm waiting for the new release.

Thanks again.

Posts: 1621
Joined: 25 Mar 2012 - 01:19
COM/OLE is not my preferred

COM/OLE is not one of my preferred technologies :(


  • language independent


  • implementing it in C++ is a nightmare
  • memory management

Actually 2.x has an IPC channel between driver and synth; communication is really fast and efficient through a memory mapped file.
I think extending this protocol is the way to go.

Anyway it's too early to think about it...

Posts: 2
Joined: 13 Gen 2014 - 08:14
suggestion for VMS 2.x API to load SoundFonts

I would like to suggest, that the API for loading soundfonts should use MIDI system exclusive commands.

The Midi Player / Sequencer / whatever sends one SysEx command for each soundfont to load to the MIDI driver, which passes the sysex command to the memory resident Exe with the BASS lib and softsynth.

The sysex command should contain the bank and preset numbers and the soundfont filename.

Implementing it this way avoids COM/OLE, would be usable from every MIDI application that supports Sysex, and would be easily portable to all platforms supported by BASS lib.

Contact me, if you need further info or if you see problems ..


Posts: 1621
Joined: 25 Mar 2012 - 01:19
SysEx is the way to go

I, too, believe that SysEx is the way to go.

VirtualMIDISynth already has a SysEx parser, actually used for reset messages (other SysEx'es are forwarded straight to Bass).
I still need some knowledge about them (I'm not a musician...), so I'll ask for help when needed.

Thanks for your suggestion

Posts: 79
Joined: 25 Set 2013 - 16:38
SysEx would be a good solution

Yeah SysEx would be a good solution but I think that coding an arbitrary soundfont file and pathname in this form is not an easy task.
It's more achievable to pre-set the soundfonts in a config dialog and the SysEx only sends the necessary file index, bank, preset etc. parameters.
This way a semi-realtime sondfont loading would be implemented since the file name have to be set before using. But I think it's enough.

Anyway I would like to inform you that I have included Bassmidi and implemented realtime soundfont loading in my MidiPlayer software, so driver level implementation is not urgent for me anymore :).

So I think the Willie suggested "Vanbasco + MAPLE VMC + "MIDI PLAYER" + VMS = changeable Soundfont instruments real time, can add up or lower down Volume, Reverb & Chorus, Panning, Modulation, Pitch, etc.." is ready now.
I would be grateful if you and others would try it and tell me your opinions.
(I don’t want to use your site as a free ad, so I placed a link to your great driver on my site, too).

During the development I have noticed some features I think would be useful on the driver level, too.
Reverb, Chorus Type and Level are not hard to implement (I have done it) and would be useful.

At last I would like to ask something: have you tried using the BASS_MIDI_FONT_MMAP flag in BASS_MIDI_FontInit  and did you notice any speed improvements?
I have tried it on many PC's and have not noticed any improvements but noticed that BASS_MIDI_FontLoad not working as expected with this flag.
I'm curious what it is your experience.

Best regards
Zoltán Bacskó

Posts: 1621
Joined: 25 Mar 2012 - 01:19
SysEx messages

Surely SysEx will be limited to enable/disable something already configured within configurator; sending filenames through SysEx messages is really bad.

I've never used the BASS_MIDI_FONT_MMAP flag, I suppose it means "memory mapping" the soundfont file.
Sorry, I don't have any experience about it.

Posts: 8
Joined: 2 Giu 2018 - 06:58
Re: SysEx messages

I add my vote for sysex to modify sound fonts (load/unload, enable/disable). It is not really a problem to even send file names as sysex is free format. You can define it to be whatever you want, as long as you don't use known companys' headers.

Posts: 1621
Joined: 25 Mar 2012 - 01:19
Re: SysEx messages
Rimokatolik wrote:
It is not really a problem to even send file names as sysex is free format

You're right, but consider that All current Windows version support (and expect) Unicode as their primary encoding, so filenames should be sent in Unicode and this could be an issue for some old players.
Remember that there's a lot of old (but well-working) MIDI stuff still around, and people got used to them and won't easily change.
So I'll end up with help request from people failing to load soundfont files... I'm just wondering, still need to think about it ;)