#include <midiparser_sci.h>
Classes | |
struct | ChannelState |
Public Member Functions | |
MidiParser_SCI (SciMusic *music) | |
void | mainThreadBegin () |
void | mainThreadEnd () |
bool | loadMusic (SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask) |
bool | loadMusic (byte *, uint32) override |
void | initTrack () |
void | sendInitCommands () |
void | unloadMusic () override |
void | setMasterVolume (byte masterVolume) |
void | setVolume (byte volume) |
void | stop () |
void | pause () |
void | allNotesOff () override |
const SciSpan< const byte > & | getMixedData () const |
byte | getSongReverb () |
void | sendFromScriptToDriver (uint32 midi) |
void | sendToDriver (uint32 midi) override |
void | sendToDriver (byte status, byte firstOp, byte secondOp) |
void | remapChannel (int channel, int devChannel) |
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) |
virtual void | onTimer () |
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 | |
void | parseNextEvent (EventInfo &info) override |
bool | processEvent (const EventInfo &info, bool fireEvents=true) override |
void | midiMixChannels () |
byte | midiGetNextChannel (long ticker) |
void | resetStateTracking () |
void | trackState (uint32 midi) |
void | sendToDriver_raw (uint32 midi) |
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) |
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 | |
SciMusic * | _music |
bool | _mainThreadCalled |
Common::SpanOwner< SciSpan< const byte > > | _mixedData |
SoundResource::Track * | _track |
MusicEntry * | _pSnd |
uint32 | _loopTick |
byte | _masterVolume |
byte | _volume |
bool | _resetOnPause |
bool | _channelUsed [16] |
int16 | _channelRemap [16] |
byte | _channelVolume [16] |
ChannelState | _channelState [16] |
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 |
An extended standard MIDI (SMF) parser. Sierra used an extra channel with special commands for extended functionality and animation syncing. Refer to MidiParser_SMF() in /sound/midiparser_smf.cpp for the standard MIDI (SMF) parser functionality that the SCI MIDI parser is based on