|
virtual void | stop () |
|
virtual void | pause () |
|
virtual void | resume () |
|
bool | isPlaying () const |
|
int | getVolume () const |
|
virtual void | setVolume (int volume) |
|
void | syncVolume () |
|
bool | hasNativeMT32 () const |
|
void | send (uint32 b) override |
|
void | metaEvent (byte type, byte *data, uint16 length) override |
|
virtual void | send (int8 source, uint32 b) |
|
void | send (byte status, byte firstOp, byte secondOp) |
|
void | send (int8 source, byte status, byte firstOp, byte secondOp) |
|
virtual void | sysEx (const byte *msg, uint16 length) |
|
virtual uint16 | sysExNoDelay (const byte *msg, uint16 length) |
|
virtual void | metaEvent (int8 source, byte type, byte *data, uint16 length) |
|
virtual void | stopAllNotes (bool stopSustainedNotes=false) |
|
virtual bool | isReady (int8 source=-1) |
|
|
static const uint8 | MIDI_CHANNEL_COUNT = 16 |
|
static const uint8 | MIDI_RHYTHM_CHANNEL = 9 |
|
static const byte | MIDI_COMMAND_NOTE_OFF = 0x80 |
|
static const byte | MIDI_COMMAND_NOTE_ON = 0x90 |
|
static const byte | MIDI_COMMAND_POLYPHONIC_AFTERTOUCH = 0xA0 |
|
static const byte | MIDI_COMMAND_CONTROL_CHANGE = 0xB0 |
|
static const byte | MIDI_COMMAND_PROGRAM_CHANGE = 0xC0 |
|
static const byte | MIDI_COMMAND_CHANNEL_AFTERTOUCH = 0xD0 |
|
static const byte | MIDI_COMMAND_PITCH_BEND = 0xE0 |
|
static const byte | MIDI_COMMAND_SYSTEM = 0xF0 |
|
static const byte | MIDI_CONTROLLER_BANK_SELECT_MSB = 0x00 |
|
static const byte | MIDI_CONTROLLER_MODULATION = 0x01 |
|
static const byte | MIDI_CONTROLLER_DATA_ENTRY_MSB = 0x06 |
|
static const byte | MIDI_CONTROLLER_VOLUME = 0x07 |
|
static const byte | MIDI_CONTROLLER_BALANCE = 0x08 |
|
static const byte | MIDI_CONTROLLER_PANNING = 0x0A |
|
static const byte | MIDI_CONTROLLER_EXPRESSION = 0x0B |
|
static const byte | MIDI_CONTROLLER_BANK_SELECT_LSB = 0x20 |
|
static const byte | MIDI_CONTROLLER_DATA_ENTRY_LSB = 0x26 |
|
static const byte | MIDI_CONTROLLER_SUSTAIN = 0x40 |
|
static const byte | MIDI_CONTROLLER_PORTAMENTO = 0x41 |
|
static const byte | MIDI_CONTROLLER_SOSTENUTO = 0x42 |
|
static const byte | MIDI_CONTROLLER_SOFT = 0x43 |
|
static const byte | MIDI_CONTROLLER_REVERB = 0x5B |
|
static const byte | MIDI_CONTROLLER_CHORUS = 0x5D |
|
static const byte | MIDI_CONTROLLER_RPN_LSB = 0x64 |
|
static const byte | MIDI_CONTROLLER_RPN_MSB = 0x65 |
|
static const byte | MIDI_CONTROLLER_ALL_SOUND_OFF = 0x78 |
|
static const byte | MIDI_CONTROLLER_RESET_ALL_CONTROLLERS = 0x79 |
|
static const byte | MIDI_CONTROLLER_ALL_NOTES_OFF = 0x7B |
|
static const byte | MIDI_CONTROLLER_OMNI_ON = 0x7C |
|
static const byte | MIDI_CONTROLLER_OMNI_OFF = 0x7D |
|
static const byte | MIDI_CONTROLLER_MONO_ON = 0x7E |
|
static const byte | MIDI_CONTROLLER_POLY_ON = 0x7F |
|
static const uint16 | MIDI_RPN_PITCH_BEND_SENSITIVITY = 0x0000 |
|
static const uint16 | MIDI_RPN_MASTER_TUNING_FINE = 0x0001 |
|
static const uint16 | MIDI_RPN_MASTER_TUNING_COARSE = 0x0002 |
|
static const uint16 | MIDI_RPN_NULL = 0x7F7F |
|
static const uint8 | MIDI_META_END_OF_TRACK = 0x2F |
|
static const uint8 | MIDI_META_SEQUENCER = 0x7F |
|
static const uint16 | MIDI_PITCH_BEND_DEFAULT = 0x2000 |
|
static const uint8 | MIDI_PANNING_DEFAULT = 0x40 |
|
static const uint8 | MIDI_EXPRESSION_DEFAULT = 0x7F |
|
static const uint16 | MIDI_MASTER_TUNING_FINE_DEFAULT = 0x2000 |
|
static const uint8 | MIDI_MASTER_TUNING_COARSE_DEFAULT = 0x40 |
|
static const uint8 | MT32_PITCH_BEND_SENSITIVITY_DEFAULT = 0x0C |
|
static const uint8 | GM_PITCH_BEND_SENSITIVITY_DEFAULT = 0x02 |
|
static const uint8 | GS_RHYTHM_FIRST_NOTE = 0x1B |
|
static const uint8 | GS_RHYTHM_LAST_NOTE = 0x58 |
|
Simple MIDI playback class.
- Note
- Currently incomplete, as it lacks play() methods. This is just a start of the real thing, which tries to include code replicated between several of our engines.
Eventually, this should offer ways to start playback of SMF and XMIDI data (and possibly make it easy to add further playback methods), should be able to automatically instantiate _driver as needed, should perform memory management on the MidiParser object(s) being used, and possibly more.
Also, pause/resume handling should be unified (we provide an implementation, but several subclasses use different ones).
Also, care should be taken to ensure that mutex locking is done right.