11#include "cnfs_image.h"
Contains all track-specific parsing state.
Definition midiFileParser.c:26
void midiParserSetFile(midiFileReader_t *reader, const midiFile_t *file)
Set a new file for the MIDI file reader. The reader's state will be reset.
Definition midiFileParser.c:906
struct midiTrackState midiTrackState_t
Definition midiFileParser.h:107
midiTrackState_t * states
An array containing the internal parser state for each track.
Definition midiFileParser.h:124
uint8_t flats
The number of flats in the key.
uint32_t deltaTime
The time between this event and the previous event.
Definition midiFileParser.h:238
uint16_t sequenceNumber
Contains a sequence number for this track, when type is SEQUENCE_NUMBER.
const char * text
Contains text data, when {type <= 0x0F}.
uint8_t data[2]
The data bytes of the MIDI status event. The meaning of these bytes depends on the status value.
Definition midiFileParser.h:137
uint8_t midiClocksPerMetronomeTick
The number of MIDI clocks per metronome tick.
Definition midiFileParser.h:150
midiTrack_t * tracks
An array of MIDI tracks.
Definition midiFileParser.h:104
midiFileFormat_t format
The MIDI file format which defines how this file's tracks are interpreted.
Definition midiFileParser.h:95
metaEventType_t type
The type of this MIDI meta-event.
Definition midiFileParser.h:161
midiFileFormat_t
The MIDI file format, which determines how to interpret the track or tracks it contains.
Definition midiFileParser.h:58
@ MIDI_FORMAT_0
One track only containing all MIDI data for any number of channels.
Definition midiFileParser.h:60
@ MIDI_FORMAT_2
Multiple MIDI tracks, played sequentially.
Definition midiFileParser.h:64
@ MIDI_FORMAT_1
Multiple MIDI tracks, played simultaneously.
Definition midiFileParser.h:62
uint8_t num32ndNotesPerBeat
Number of 32nd notes per 24 MIDI clocks (= 1 beat)
Definition midiFileParser.h:152
int midiWriteEvent(uint8_t *out, int max, const midiEvent_t *event)
Writes a MIDI event to a byte buffer.
Definition midiFileParser.c:1091
const uint8_t * data
A pointer to the data for this SysEx event.
Definition midiFileParser.h:229
midiEventType_t
The possible sub-types of MIDI events.
Definition midiFileParser.h:21
@ META_EVENT
A non-MIDI meta-event from a MIDI file, such as tempo or lyrics.
Definition midiFileParser.h:25
@ MIDI_EVENT
A normal MIDI status event, such as note on or off.
Definition midiFileParser.h:23
@ SYSEX_EVENT
A system-exclusive MIDI event.
Definition midiFileParser.h:27
uint8_t stateCount
The number of track states allocated.
Definition midiFileParser.h:121
void resetMidiParser(midiFileReader_t *reader)
Reset the state of the MIDI parser without deinitializing it or changing the file.
Definition midiFileParser.c:930
midiSysexEvent_t sysex
The MIDI System Exclusive event data, when type is SYSEX_EVENT.
uint8_t denominator
The power of two of the time signature denominator (e.g. 2 for 4/4, 3 for 4/8)
Definition midiFileParser.h:148
bool midiNextEvent(midiFileReader_t *reader, midiEvent_t *event)
Process and retrieve the next MIDI event in the file.
Definition midiFileParser.c:971
uint8_t prefix
Contains a channel or port prefix, when type is CHANNEL_PREFIX or PORT_PREFIX respectively.
uint16_t timeDivision
The time division of MIDI frames, either ticks per frame or ticks per quarter note.
Definition midiFileParser.h:98
bool loadMidiFile(cnfsFileIdx_t fIdx, midiFile_t *file, bool spiRam)
Load a MIDI file from the filesystem.
Definition midiFileParser.c:821
const uint8_t * data
Contains binary data, when type is PROPRIETARY.
metaEventType_t
The possible types of meta-events.
Definition midiFileParser.h:34
@ TIME_SIGNATURE
Definition midiFileParser.h:51
@ SEQUENCE_NUMBER
Definition midiFileParser.h:35
@ KEY_SIGNATURE
Definition midiFileParser.h:52
@ LYRIC
Definition midiFileParser.h:40
@ MARKER
Definition midiFileParser.h:41
@ PORT_PREFIX
Definition midiFileParser.h:47
@ CUE_POINT
Definition midiFileParser.h:42
@ SEQUENCE_OR_TRACK_NAME
Definition midiFileParser.h:38
@ TEXT
Definition midiFileParser.h:36
@ COPYRIGHT
Definition midiFileParser.h:37
@ CHANNEL_PREFIX
Definition midiFileParser.h:46
@ INSTRUMENT_NAME
Definition midiFileParser.h:39
@ PROPRIETARY
Definition midiFileParser.h:53
@ SMPTE_OFFSET
Definition midiFileParser.h:50
@ TEMPO
Definition midiFileParser.h:49
@ END_OF_TRACK
Definition midiFileParser.h:48
uint16_t trackCount
The number of tracks in this file.
Definition midiFileParser.h:101
const midiFile_t * file
A pointer to the MIDI file currently loaded into the reader, if any.
Definition midiFileParser.h:112
void deinitMidiParser(midiFileReader_t *reader)
Deinitialize the MIDI file reader and free any memory it has allocated.
Definition midiFileParser.c:957
midiStatusEvent_t midi
The MIDI status event data, when type is MIDI_EVENT.
uint8_t track
The index of the track which contains this event.
Definition midiFileParser.h:247
bool loadMidiData(uint8_t *data, size_t size, midiFile_t *file)
Load a MIDI file from raw data, without copying it.
Definition midiFileParser.c:795
bool minor
True for a minor key, false for a major key.
uint8_t numerator
The numerator of the time signature.
Definition midiFileParser.h:146
uint8_t * data
Pointer to the start of this chunk's data.
Definition midiFileParser.h:80
void unloadMidiFile(midiFile_t *file)
Free the data associated with the given MIDI file.
Definition midiFileParser.c:883
uint32_t absTime
The absolute timestamp of this event in ticks.
Definition midiFileParser.h:241
uint8_t prefix
A byte to prefix to the actual data, if non-zero.
Definition midiFileParser.h:226
uint8_t status
The MIDI status byte.
Definition midiFileParser.h:133
midiEventType_t type
The overall event type – MIDI, Meta, or SysEx.
Definition midiFileParser.h:244
uint32_t tempo
Contains a tempo, in microseconds per quarter note, when type is TEMPO.
midiMetaEvent_t meta
The non-MIDI meta-event data, when type is META_EVENT.
uint32_t length
Total chunk length.
Definition midiFileParser.h:77
uint16_t manufacturerId
The manufacturer ID embedded in the SysEx event.
Definition midiFileParser.h:220
bool handleMetaEvents
If true, text meta-events will be handled and sent to the MIDI player.
Definition midiFileParser.h:115
uint8_t sharps
The number of sharps in the key.
bool initMidiParser(midiFileReader_t *reader, const midiFile_t *file)
Initialize or reset the MIDI file reader with a particular file.
Definition midiFileParser.c:890
uint32_t midiNextEventTime(midiFileReader_t *reader)
Return the start time of the next event in the MIDI file being read.
uint16_t division
The number of divisions per midi tick.
Definition midiFileParser.h:118
Contains information for an entire MIDI event or non-MIDI meta-event.
Definition midiFileParser.h:236
Definition midiFileParser.h:110
Contains information which applies to the entire MIDI file.
Definition midiFileParser.h:87
Data for a normal MIDI status event.
Definition midiFileParser.h:131
Contains information for a MIDI System Exclusive event.
Definition midiFileParser.h:217
Data for a MIDI time signature definition.
Definition midiFileParser.h:144
Contains basic information pointing to a MIDI track within its file data.
Definition midiFileParser.h:75