#include <midiparser_m.h>
Classes | |
struct | LoopData |
Public Member Functions | |
MidiParser_M (int8 source=-1) | |
bool | loadMusic (byte *data, uint32 size) override |
void | unloadMusic () override |
void | onTimer () override |
Public Member Functions inherited from MidiParser | |
MidiParser (int8 source=-1) | |
virtual void | property (int prop, int value) |
virtual int32 | determineDataSize (Common::SeekableReadStream *stream) |
virtual void | setMidiDriver (MidiDriver_BASE *driver) |
void | setTimerRate (uint32 rate) |
virtual void | setTempo (uint32 tempo) |
bool | isPlaying () const |
bool | startPlaying () |
void | stopPlaying () |
void | pausePlaying () |
void | resumePlaying () |
bool | setTrack (int track) |
bool | jumpToTick (uint32 tick, bool fireEvents=false, bool stopNotes=true, bool dontSendNoteOn=false) |
virtual bool | hasJumpIndex (uint8 index) |
virtual bool | jumpToIndex (uint8 index, bool stopNotes=true) |
uint32 | getPPQN () |
virtual uint32 | getTick () |
Protected Member Functions | |
bool | processEvent (const EventInfo &info, bool fireEvents=true) override |
void | parseNextEvent (EventInfo &info) override |
void | allNotesOff () override |
Protected Member Functions inherited from MidiParser | |
virtual void | resetTracking () |
void | activeNote (byte channel, byte note, bool active) |
void | hangingNote (byte channel, byte note, uint32 ticksLeft, bool recycle=true) |
void | hangAllActiveNotes () |
virtual void | onTrackStart (uint8 track) |
virtual void | sendToDriver (uint32 b) |
void | sendToDriver (byte status, byte firstOp, byte secondOp) |
virtual void | sendMetaEventToDriver (byte type, byte *data, uint16 length) |
uint32 | read4high (byte *&data) |
uint16 | read2low (byte *&data) |
Protected Attributes | |
uint32 | _trackLength |
byte * | _loopPoint |
Common::FixedStack< LoopData, 16 > * | _loopStack |
Protected Attributes inherited from MidiParser | |
uint16 | _activeNotes [128] |
Each uint16 is a bit mask for channels that have that note on. | |
NoteTimer | _hangingNotes [32] |
Used for "Smart Jump" and MIDI formats that do not include explicit Note Off events. More... | |
byte | _hangingNotesCount |
Count of hanging notes, used to optimize expiration. | |
MidiDriver_BASE * | _driver |
The device to which all events will be transmitted. | |
uint32 | _timerRate |
The time in microseconds between onTimer() calls. Obtained from the MidiDriver. | |
uint32 | _ppqn |
Pulses Per Quarter Note. (We refer to "pulses" as "ticks".) | |
uint32 | _tempo |
Microseconds per quarter note. | |
uint32 | _psecPerTick |
Microseconds per tick (_tempo / _ppqn). | |
uint32 | _sysExDelay |
Number of microseconds until the next SysEx event can be sent. | |
bool | _autoLoop |
For lightweight clients that don't provide their own flow control. | |
bool | _smartJump |
Support smart expiration of hanging notes when jumping. | |
bool | _centerPitchWheelOnUnload |
Center the pitch wheels when unloading a song. | |
bool | _sendSustainOffOnNotesOff |
Send a sustain off on a notes off event, stopping hanging notes. | |
bool | _disableAllNotesOffMidiEvents |
Don't send All Notes Off MIDI messages. | |
bool | _disableAutoStartPlayback |
Do not automatically start playback after parsing MIDI data or setting the track. | |
byte * | _tracks [MAXIMUM_TRACKS] |
Multi-track MIDI formats are supported, up to 120 tracks. | |
byte | _numTracks |
Count of total tracks for multi-track MIDI formats. 1 for single-track formats. | |
byte | _activeTrack |
Keeps track of the currently active track, in multi-track formats. | |
Tracker | _position |
The current time/position in the active track. | |
EventInfo | _nextEvent |
bool | _abortParse |
If a jump or other operation interrupts parsing, flag to abort. | |
bool | _jumpingToTick |
True if currently inside jumpToTick. | |
bool | _doParse |
True if the parser should be parsing; false if it should not be active. | |
bool | _pause |
True if the parser has paused parsing. | |
int8 | _source |
Additional Inherited Members | |
Public Types inherited from MidiParser | |
enum | { mpAutoLoop = 2, mpSmartJump = 3, mpCenterPitchWheelOnUnload = 4, mpSendSustainOffOnNotesOff = 5, mpDisableAllNotesOffMidiEvents = 6, mpDisableAutoStartPlayback = 7 } |
typedef void(* | XMidiCallbackProc) (byte eventData, void *refCon) |
Static Public Member Functions inherited from MidiParser | |
static void | defaultXMidiCallback (byte eventData, void *refCon) |
static MidiParser * | createParser_SMF (int8 source=-1) |
static MidiParser * | createParser_XMIDI (XMidiCallbackProc proc=defaultXMidiCallback, void *refCon=0, int source=-1) |
static MidiParser * | createParser_QT (int8 source=-1) |
static void | timerCallback (void *data) |
Static Protected Member Functions inherited from MidiParser | |
static uint32 | readVLQ (byte *&data) |
Static Protected Attributes inherited from MidiParser | |
static const uint8 | MAXIMUM_TRACKS = 120 |
A parser for the music format M, used by Times Of Lore, Bad Blood and Ultima 6. This format is not really a MIDI format; it targets the OPL2 chip. However, it has several things in common with MIDI: it is a stream of events, it has note on and note off events and events similar to MIDI controllers, the high nibble of the first event byte is the command while the low nibble is usually the channel. The commands are different. M does not use the status byte / data byte convention and delta times are specified using a wait command. It uses channels 0-8, corresponding to the 9 OPL2 channels. OPL rhythm mode is not used.