I remember the similar problem in case of CC94/UserFx so I would like to ask a similar solution.
(http://www.un4seen.com/forum/?topic=20320.msg142234#msg142234)
Namely a new flag (e.g BASS_MIDI_NODRUMPARAMCHORUS). That is a flag that still preserves the default reverb settings but allow the chorus effects to be applied to drum channels (independently).
I'm not sure there are any more free flag bits for that, so an option may need to be added some other way. I'll have to think about it. Let me know if you have any suggestions.
Regarding the intercepting events solution, the per-drum params get reset by MIDI_EVENT_SYSTEM(EX), MIDI_EVENT_PROGRAM and MIDI_EVENT_DRUMS changes. So those are the ones you would need to catch and then override with your chorus level(s) via MIDI_EVENT_DRUM_CHORUS (note you can use key=255 to set all keys in a single event). If you're using BASS_MIDI_StreamEvent to play events then you can do the "intercepting" there, otherwise BASS_MIDI_StreamSetFilter could be used.
Thanks,
I have tested setting MIDI_EVENT_DRUM_CHORUS in a SyncProc installed by BASS_MIDI_StreamSetFilter and I have noticed that MIDI_EVENT_DRUMS events are only triggered by GS style SysEx based drum channel messages.
E.g. in GM2 mode setting Bank MSB to 120 (drum) and back to 121 (melodic) together with a program change does not trigger an MIDI_EVENT_DRUMS event in the syncproc.
Can you confirm this not so consistent behavior?
Also it seems that calling BASS_MIDI_StreamEvent() from the triggered syncproc directly does not work. I have to use PostMessage() Win32 API from the syncproc that calls BASS_MIDI_StreamEvent() when processed in the main loop.
BTW, for me it seems there are still spaces for new flags. In case of BASS_MIDI_StreamCreate() the list of flags is:
// Additional BASS_MIDI_StreamCreateFile/etc flags
#define BASS_MIDI_NODRUMPARAMUSER 0x200
#define BASS_MIDI_NODRUMPARAM 0x400
#define BASS_MIDI_NOSYSRESET 0x800
#define BASS_MIDI_DECAYEND 0x1000
#define BASS_MIDI_NOFX 0x2000
#define BASS_MIDI_DECAYSEEK 0x4000
#define BASS_MIDI_NOCROP 0x8000
#define BASS_MIDI_NOTEOFF1 0x10000
#define BASS_MIDI_ASYNC 0x400000
#define BASS_MIDI_SINCINTER 0x800000
Acording to this e.g. 0x100 is free.
And even 0x20000, 0x40000 etc. are free in the upper region (between BASS_MIDI_NOTEOFF1 and BASS_MIDI_ASYNC) .