If you would like to just randomise the tuning or filtering of drums, that should be possible via the MIDI_EVENT_DRUM_FINETUNE/CUTOFF/RESONANCE events. You could have a MIDIFILTERPROC callback function (set via BASS_MIDI_StreamSetFilter) randomise those things just before playing a drum note. For example, something like this:
BOOL CALLBACK MidiFilterProc(HSTREAM handle, int track, BASS_MIDI_EVENT *event, BOOL seeking, void *user)
{
if (event->event == MIDI_EVENT_NOTE && HIBYTE(event->param) > 0 // got a note-on event
&& BASS_MIDI_StreamGetEvent(handle, event->chan, MIDI_EVENT_DRUMS)) { // in a drum channel
int key = LOBYTE(event->param);
int tune = rand() & 127;
BASS_MIDI_StreamEvent(handle, event->chan, MIDI_EVENT_DRUM_FINETUNE, MAKEWORD(key, tune)); // set random finetuning for the note
}
return TRUE; // process the event
}
Please see the BASS_MIDI_StreamSetFilter and MIDIFILTERPROC documentation for details.