BASS_MIDI_StreamCreateEvents
Creates a sample stream from a sequence of MIDI events.
HSTREAM BASS_MIDI_StreamCreateEvents( BASS_MIDI_EVENT *events, DWORD ppqn, DWORD flags, DWORD freq );
Parameters
events | Pointer to an array containing the event sequence to play. | ||||||||||||||||||||||||||||||||
ppqn | The Pulses Per Quarter Note, or ticks per beat. | ||||||||||||||||||||||||||||||||
flags | A combination of these flags.
| ||||||||||||||||||||||||||||||||
freq | Sample rate to render/play the MIDI stream at... 0 = the rate specified in the BASS_Init call, 1 = the device's current output rate (or the BASS_Init rate if that is not available). |
Return value
If successful, the new stream's handle is returned, else 0 is returned. Use BASS_ErrorGetCode to get the error code.Error codes
BASS_ERROR_INIT | BASS_Init has not been successfully called. |
BASS_ERROR_NOTAVAIL | Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels. |
BASS_ERROR_ILLPARAM | ppqn cannot be 0. |
BASS_ERROR_ILLTYPE | The event sequence contains invalid event type(s). |
BASS_ERROR_POSITION | The events must be in chronological order (within each track). |
BASS_ERROR_FORMAT | The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported. |
BASS_ERROR_SPEAKER | The specified SPEAKER flags are invalid. The device/drivers do not support them or 3D functionality is enabled. |
BASS_ERROR_MEM | There is insufficient memory. |
BASS_ERROR_NO3D | Could not initialize 3D support. |
BASS_ERROR_UNKNOWN | Some other mystery problem! |
Remarks
This function creates a 16 channel MIDI stream to play a predefined sequence of MIDI events. Any of the standard MIDI events listed in the BASS_MIDI_StreamEvent section can be used, but the MIDI_EVENT_SYSTEMEX and the "non-MIDI" events (eg. MIDI_EVENT_MIXLEVEL) events are not available and will be rejected. The sequence should end with a MIDI_EVENT_END event. Multiple tracks are possible via the MIDI_EVENT_END_TRACK event, which signals the end of a track; the next event will be in a new track.The event sequence is copied, so the events array does not need to persist beyond the function call.
Soundfonts provide the sounds that are used to render a MIDI stream. A default soundfont configuration is applied initially to the new MIDI stream, which can subsequently be overridden using BASS_MIDI_StreamSetFonts.
Platform-specific
Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored. On Android and iOS, sinc interpolation requires a NEON-supporting CPU; the BASS_MIDI_SINCINTER flag will otherwise be ignored. Sinc interpolation is not available on Windows CE.Example
Play a middle C note (key 60) on a violin every 2 seconds.BASS_MIDI_EVENT events[]={ {MIDI_EVENT_TEMPO, 500000, 0, 0}, // set the tempo to 0.5 seconds per quarter note {MIDI_EVENT_PROGRAM, 40, 0, 0}, // select the violin preset {MIDI_EVENT_NOTE, MAKEWORD(60, 100), 0, 0}, // press the key {MIDI_EVENT_NOTE, 60, 0, 200}, // release the key after 200 ticks {MIDI_EVENT_END, 0, 0, 400} // end after 400 ticks }; HSTREAM stream=BASS_MIDI_StreamCreateEvents(events, 100, BASS_SAMPLE_LOOP, 0); // create a looping stream from the events BASS_ChannelPlay(stream, 0); // start playing it
See also
BASS_MIDI_StreamCreate, BASS_MIDI_StreamCreateFile, BASS_MIDI_StreamGetChannel, BASS_MIDI_StreamLoadSamples, BASS_MIDI_StreamSetFonts, BASS_ATTRIB_MIDI_CPU, BASS_ATTRIB_MIDI_SRC, BASS_CONFIG_MIDI_DEFFONT, BASS_CONFIG_MIDI_VOICESBASS_ChannelGetInfo, BASS_ChannelPlay, BASS_ChannelSetAttribute, BASS_ChannelSetDSP, BASS_ChannelSetFX, BASS_ChannelSetLink, BASS_StreamFree