Author Topic: Bassmidi ignores "Bank select mex" in GM Mode On, problem with a lot of files  (Read 448 times)

orator89

  • Posts: 1
Ehi,

I'm new in the forum, my name is Luca.

I use bassmidi based synth like "Virtual Midi Synth" and a big problem, due to bassmidi configuration, presents.
A lot of midi of GEM (Generalmusic) and others, have GM Mode On sysex mex, and after that there are SysexELKA mex but theres'not GS sysex. Those midis uses variation in BANK, but because of the GM ON only mex, bassmidi ignores "bank select mex", so it uses 000:121 instead of 001:121 bank:preset. That happens because bassmidi behaviour is like Roland synth, and it ignores bank select mex in GM MODE ON.
Is it possible to set bassmidi not ignore GS bank select mex in GM MODE, or maybe to set the synth that uses bassmidi to use bank select mex in GM Mode?
In Winlive Synth for example (that doesn't use bassmidi) you can set the synth/player to send a GS reset before the track playing, and in this case, if the midifile has GM sysex only, the GS reset of Winlive will work. Instead in the other players that uses bassmidi Virtual midi synth is impossible do that I think...

Maybe can you indicate the way to send a sysex that will win over the midi sysex (like happens in Winlive Synth engine) or to enable bank select in Gm mode with bassmidi?????
Or maybe can you do a customized version of bassmidi that doesn't ignore bank select mex in GM Mode On?

Thanks

Ian @ un4seen

  • Administrator
  • Posts: 21370
It is possible to override events (eg. change GM mode to GS mode) but that is something that the synth would need to implement, eg. via a new option. If you would like to ask the synth developer to do that, here is how they could do it:

Code: [Select]
BASS_ChannelSetSync(midi, BASS_SYNC_MIDI_EVENT, MIDI_EVENT_SYSTEM, SystemSyncProc, NULL); // set a sync on SYSTEM events

...

void CALLBACK SystemSyncProc(HSYNC handle, DWORD channel, DWORD data, void *user)
{
DWORD param = LOWORD(data);
if (param == MIDI_SYSTEM_GM1) // got a GM mode event
BASS_MIDI_StreamEvent(channel, 0, MIDI_EVENT_SYSTEM, MIDI_SYSTEM_DEFAULT); // change it to default mode (basically GS)
}

Note that the BASS_MIDI_EVENTS_SYNC flag needs to be used in BASS_MIDI_StreamEvents calls to have them trigger the sync.