Format Specification

A match file consists of three main parts. The first part at the beginning of the file contains meta-information such as versioning, names and tags, and score related information, i.e., key signature, time signature, etc. The second part is the main core of the document and contains note-wise alignments, as well as deletions and insertions entries. The third and last part is found at the end of the document and contains all listed sustain pedal events with their MIDI cc values.

Global Information Lines

SyntaxValue typeMandatoryDescription
info(matchFileVersion,value).stringMatchfile version (current 1.0.0 previous 5.0, see version changes)
info(piece,value).stringPiece name or opus number
info(scoreFileName,value).stringCorresponding score file name (e.g. musicxml)
info(scoreFilePath,value).stringCorresponding score file path
info(midiFileName,value).stringCorresponding MIDIfile name
info(midiFilePath,value).stringCorresponding MIDI file path
info(audioFileName,value).stringCorresponding audio file name
info(audioFilePath,value).stringCorresponding audio file path
info(audioFirstNote,value).floatTime of first note onset in audio file
info(audioLastNote,value).floatTime of last note onset in audio file
info(performer,value).stringPerformer name
info(composer,value).stringComposer name
info(midiClockUnits,value).integerMIDI Clock Units (MIDI parts per quarter)
info(midiClockRate,value).integerMIDI Clock Rate (Microseconds per quarter)
info(keySignature,value).[string]deprecated (first) Key signature (see score properties)
info(timeSignature,value).[integer / integer]deprecated (first) Time signature (see score properties)
info(beatSubdivision,value).[int]deprecated Beat subdivision (see score properties)
info(tempoIndication,value).[string]deprecated Tempo directions (see score properties)
info(approximateTempo,value).floatApproximate tempo
info(subtitle,value).stringSubtitles

Score Property Lines

Time Signature:

scoreprop(timeSignature,TimeSigValue,Measure:Beat,Offset,Duration,OnsetInBeats).

Key Signature:

scoreprop(keySignature,KeySigValue,Measure:Beat,Offset,Duration,OnsetInBeats).

Beat Subdivision:

scoreprop(beatSubDivision,BeatSubValue,Measure:Beat,Offset,Duration,OnsetInBeats).

Directions:

scoreprop(directions,DirectionsValue,Measure:Beat,Offset,Duration,OnsetInBeats).

Value nameValue typeDescription
Measureintegermeasure number (starting at 1, 0 for anacrusis) of the score position
Beatintegerinteger beat number (starting at 1) of the score position
OffsetInteger / integeroffset of the score position from beat position (in symbolic duration; fraction of whole notes)
OnsetInBeatsfloatscore position in contiguous beats (beat 0 = start of measure 1, beat unit = time signature denominator)
TimeSigValueinteger / integerTime signature
KeySigValueKey signature
BeatSubValueInteger?
DirectionsValue[string]A list of performance directions

Section Lines

Section in the score with reference positions in the underlying (non-unfolded) score:

section(StartInBeatsUnfolded,EndInBeatsUnfolded, StartInBeatsOriginal, EndInBeatsOriginal, RepeatEndType).

Possible values:

Value nameValue typeDescription
StartInBeatsUnfoldedfloatStart of the segment in beats in unfolded score time
EndInBeatsUnfoldedfloatEnd of the segment in beats in the unfolded score time
StartInBeatsOriginalfloatStart of the segment in beats in the original score
EndInBeatsOriginalfloatEnd of the segment in beats in the original score
RepeatEndType[string]optional: list of type of the end of segment, e.g. “fine” “repeat left”, “volta end”, etc.

Match Lines

Beat, downbeat, or any score position annotation between performance and score:

stime(Measure:Beat,Offset,OnsetInBeats,AnnotationType)-ptime(Onsets).

Value nameValue typeDescription
Measureintegermeasure number (starting at 1, 0 for anacrusis) of the score position
Beatintegerinteger beat number (starting at 1) of the score position
OffsetInteger / integeroffset of the score position****from beat position (in symbolic duration; fraction of whole notes)
OnsetInBeatsfloatscore position in contiguous beats (beat 0 = start of measure 1, beat unit = time signature denominator)
AnnotationType[string]Optional: list of types of annotation, e.g. “beat”, “measure”, or “downbeat”
Onsets[integer]Array of at least one time in parts/ticks of the performance annotation corresponding to the score position

Notes in the performance:

note(ID,MIDIpitch,Onset,Offset,Velocity).

Value nameValue typeDescription
IDintegerNote identifier
MIDIpitchintegerPitch 0-127
OnsetintegerTime in parts/ticks of the note on message
OffsetintegerTime in parts/ticks of the note off message
adjustedOffsetintegerdeprecated Sounding note off when adjusted by sustain pedal information (see pedal lines)
VelocityintegerNote on velocity 0-127

Notes in the score

snote(Anchor,[NoteName,Modifier],Octave,Measure:Beat,Offset,Duration,OnsetInBeats,OffsetInBeats,ScoreAttributesList).

Value nameValue typeDescription
AnchorstringNote identifier (we should specifically reserve “-” at the end of the anchor as “repetition”)
NoteNamestringPitch class name in [C, D, E, F, G, A, B]
Modifierstringpitch modifier in [“”, n, b, #, bb, x]
Octaveintegeroctave number (scientific notation, middle C is in octave 4)
Measureintegermeasure number (starting at 1, 0 for anacrusis)
Beatintegerinteger beat number of note onset (starting at 1)
Offsetinteger / integeroffset from beat position (in symbolic duration; fraction of whole notes)
OnsetInBeatsfloatonset position in contiguous beats (beat 0 = start of measure 1, beat unit = time signature denominator)
OffsetInBeatsfloatoffset position in beats
ScoreAttributesList[string]note attributes (“grace”, “appoggiatura”, etc.)

score note matched to a performed note:

snote( _ , … , _ )-note( _ , … , _ ).

snote(Anchor,NoteName,Modifier],Octave,Measure:Beat,Offset,Duration,OnsetInBeats,OffsetInBeats,ScoreAttributesList)-note(ID,MIDIpitch,Onset,Offset,Velocity).

Value nameValue typeDescription
AnchorstringNote identifier (we should specifically reserve “-” at the end of the anchor as “repetition”)
NoteNamestringPitch class name in [C, D, E, F, G, A, B]
Modifierstringpitch modifier in [“”, n, b, #, bb, x]
Octaveintegeroctave number (scientific notation, middle C is in octave 4)
Measureintegermeasure number (starting at 1, 0 for anacrusis)
Beatintegerinteger beat number of note onset (starting at 1)
Offsetinteger / integeroffset from beat position (in symbolic duration; fraction of whole notes)
OnsetInBeatsfloatonset position in contiguous beats (beat 0 = start of measure 1, beat unit = time signature denominator)
OffsetInBeatsfloatoffset position in beats
ScoreAttributesList[string]note attributes (“grace”, “appoggiatura”, etc.)
IDintegerNote identifier
MIDIpitchintegerPitch 0-127
OnsetintegerTime in parts/ticks of the note on message
OffsetintegerTime in parts/ticks of the note off message
adjustedOffsetintegerdeprecated Sounding note off when adjusted by sustain pedal information (see pedal lines)
VelocityintegerNote on velocity 0-127

Omitted score note

Score notes that were omitted in the performance:

snote( _ , … , _ )-deletion.

Inserted Performed note:

Performed notes that are not found in the score:

insertion-note( _ , … , _ ).

Pedal Lines

Pedal lines represent MIDI cc 64 (sustain pedal) messages in the performance MIDI file.

Pedal line:

sustain(Time,Value).

Value nameValue typeDescription
TimeintegerTime in parts/ticks of the pedal message
ValueintegerSustain pedal value 0-127

Institute of Computational Perception, JKU.