Enables looping (marked with LOOPBEGIN and LOOPEND), then repeates the MIDI data between these points until either looping gets disabled, or the sequencer gets shut down.
Makes the sequencer to go forward by the given amount of time, and emits MIDI commands to the associated modules if the time have reached that point.
Loads a MIDI file into the sequencer, and initializes some basic data.
Pauses the sequencer. Note: Won't pause states of associated modules.
Resets the sequencer.
Sets the time division for the given track
Starts the sequencer.
Stops the sequencer.
Converts MIDI tics to Duration.
Save states for looping.
Module list.
Current event position for all individual tracks.
Current time position for all individual tracks.
Group routing for each module.
Routings for multi-track MIDI files.
Source file deconstructed.
Stores status flags, see enum Status
States of the tracks. Bit 0 : End of track marker has reached.
Precalculated microseconds per tic (per track) for less complexity.
Makes the sequencer to go forward by the given amount of time, and emits MIDI commands to the associated modules if the time have reached that point.
Implements a MIDI v1.0 sequencer.
Since MIDI v2.0 isn't widespread (and seems like I even have to implement my own format) and v1.0 is widespread and still capable enough (even if getting the most out of it needs some klunkiness), I'm creating an internal sequencer for this format too. By using multiple tracks, it's able to interface with multiple modules.