Applies any number of events to a MIDI stream.
DWORD BASS_MIDI_StreamEvents(
HSTREAM handle,
DWORD mode,
void *events,
DWORD length
);
| handle | The MIDI stream to apply the events to. | ||||||
| mode | The type of event data to apply. One of the following, with optional flags.
| ||||||
| events | The event data. | ||||||
| length | The length of the event data. The number of bytes or BASS_MIDI_EVENT structures, depending on the type of event data. |
| BASS_ERROR_HANDLE | handle is not valid. |
| BASS_ERROR_ILLPARAM | mode is not valid. |
If the MIDI stream is being played (it is not a decoding channel), then there will be some delay in the effect of the event being heard. This latency can be reduced by making use of the BASS_CONFIG_BUFFER and BASS_CONFIG_UPDATEPERIOD config options when creating the stream.
BASS_MIDI_EVENT events[3]; events[0].event=MIDI_EVENT_NOTE; events[0].param=MAKEWORD(60, 100); // C events[0].chan=0; events[1].event=MIDI_EVENT_NOTE; events[1].param=MAKEWORD(64, 100); // E events[1].chan=0; events[2].event=MIDI_EVENT_NOTE; events[2].param=MAKEWORD(67, 100); // G events[2].chan=0; BASS_MIDI_StreamEvents(handle, BASS_MIDI_EVENTS_STRUCT, events, 3); // process the events Sleep(2000); // wait 2 seconds // modify the event data to release the keys events[0].param=60; // release C events[1].param=64; // release E events[2].param=67; // release G BASS_MIDI_StreamEvents(handle, BASS_MIDI_EVENTS_STRUCT, events, 3); // process the events
The same thing using raw MIDI event data.
BYTE events[7]={0x90, 60, 100, 64, 100, 67, 100}; // the event data
BASS_MIDI_StreamEvents(handle, BASS_MIDI_EVENTS_RAW, events, 7); // process the events
Sleep(2000); // wait 2 seconds
// modify the event data to release the keys
events[2]=0; // release C
events[4]=0; // release E
events[6]=0; // release G
BASS_MIDI_StreamEvents(handle, BASS_MIDI_EVENTS_RAW, events, 7); // process the events