From 899549623dca59ce215d90149e41bb9681540d52 Mon Sep 17 00:00:00 2001 From: twystd Date: Mon, 26 Aug 2024 00:50:52 -0700 Subject: [PATCH] midi: cleaned up event decoding logic --- format/midi/metaevents.go | 250 ++++++--------------------- format/midi/midi.go | 10 ++ format/midi/midievents.go | 82 +++------ format/midi/sysex.go | 6 +- format/midi/testdata/format-0.fqtest | 72 ++++---- format/midi/testdata/format-1.fqtest | 76 ++++---- format/midi/testdata/format-2.fqtest | 144 +++++++-------- format/midi/testdata/keys.fqtest | 68 ++++---- format/midi/testdata/tempo.fqtest | 2 + format/midi/testdata/test.fqtest | 76 ++++---- 10 files changed, 315 insertions(+), 471 deletions(-) diff --git a/format/midi/metaevents.go b/format/midi/metaevents.go index ab276af0..473339c9 100644 --- a/format/midi/metaevents.go +++ b/format/midi/metaevents.go @@ -31,24 +31,24 @@ const ( ) var metaevents = scalar.UintMapSymStr{ - 0xff00: "sequence umber", - 0xff01: "text", - 0xff02: "copyright", - 0xff03: "track name", - 0xff04: "instrument name", - 0xff05: "lyric", - 0xff06: "marker", - 0xff07: "cue point", - 0xff08: "program name", - 0xff09: "device name", - 0xff20: "midi channel prefix", - 0xff21: "midi port", - 0xff51: "tempo", - 0xff54: "smpte offset", - 0xff58: "time signature", - 0xff59: "key signature", - 0xff2f: "end of track", - 0xff7f: "sequencer specific event", + 0xff00: "Sequence Number", + 0xff01: "Text", + 0xff02: "Copyright", + 0xff03: "Track Name", + 0xff04: "Instrument Name", + 0xff05: "Lyric", + 0xff06: "Marker", + 0xff07: "Cue Point", + 0xff08: "Program Name", + 0xff09: "Device Name", + 0xff20: "Midi Channel Prefix", + 0xff21: "Midi Port", + 0xff51: "Tempo", + 0xff54: "Smpte Offset", + 0xff58: "Time Signature", + 0xff59: "Key Signature", + 0xff2f: "End Of Track", + 0xff7f: "Sequencer Specific Event", } var framerates = scalar.UintMapSymUint{ @@ -69,132 +69,68 @@ func decodeMetaEvent(d *decode.D, event uint8, ctx *context) { ctx.tick += dt } + metaevent := func(name string, f func(d *decode.D)) { + d.FieldStruct(name, func(d *decode.D) { + d.FieldStruct("time", delta) + d.FieldU16("event", metaevents) + f(d) + }) + } + switch MetaEventType(event) { case TypeSequenceNumber: - d.FieldStruct("SequenceNumber", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeSequenceNumber(d) - }) + metaevent("SequenceNumber", decodeSequenceNumber) case TypeText: - d.FieldStruct("Text", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeText(d) - }) + metaevent("Text", decodeText) case TypeCopyright: - d.FieldStruct("Copyright", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeCopyright(d) - }) + metaevent("Copyright", decodeCopyright) case TypeTrackName: - d.FieldStruct("TrackName", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeTrackName(d) - }) + metaevent("TrackName", decodeTrackName) case TypeInstrumentName: - d.FieldStruct("InstrumentName", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeInstrumentName(d) - }) + metaevent("InstrumentName", decodeInstrumentName) case TypeLyric: - d.FieldStruct("Lyric", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeLyric(d) - }) + metaevent("Lyric", decodeLyric) case TypeMarker: - d.FieldStruct("Marker", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeMarker(d) - }) + metaevent("Marker", decodeMarker) case TypeCuePoint: - d.FieldStruct("CuePoint", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeCuePoint(d) - }) + metaevent("CuePoint", decodeCuePoint) case TypeProgramName: - d.FieldStruct("ProgramName", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeProgramName(d) - }) + metaevent("ProgramName", decodeProgramName) case TypeDeviceName: - d.FieldStruct("DeviceName", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeDeviceName(d) - }) + metaevent("DeviceName", decodeDeviceName) case TypeMIDIChannelPrefix: - d.FieldStruct("TypeMIDIChannelPrefix", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeMIDIChannelPrefix(d) - }) + metaevent("MIDIChannelPrefix", decodeMIDIChannelPrefix) case TypeMIDIPort: - d.FieldStruct("TypeMIDIPort", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeMIDIPort(d) - }) + metaevent("MIDIPort", decodeMIDIPort) case TypeTempo: - d.FieldStruct("Tempo", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeTempo(d) - }) + metaevent("Tempo", decodeTempo) case TypeSMPTEOffset: - d.FieldStruct("SMPTEOffset", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeSMPTEOffset(d) - }) + metaevent("SMPTEOffset", decodeSMPTEOffset) case TypeTimeSignature: - d.FieldStruct("TimeSignature", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeTimeSignature(d) - }) + metaevent("TimeSignature", decodeTimeSignature) case TypeKeySignature: - d.FieldStruct("KeySignature", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeKeySignature(d) - }) + metaevent("KeySignature", decodeKeySignature) case TypeEndOfTrack: - d.FieldStruct("EndOfTrack", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeEndOfTrack(d) - }) + metaevent("EndOfTrack", decodeEndOfTrack) case TypeSequencerSpecificEvent: - d.FieldStruct("SequencerSpecific", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldU16("event", metaevents) - decodeSequencerSpecificEvent(d) - }) + metaevent("SequencerSpecific", decodeSequencerSpecificEvent) default: flush(d, "unknown meta event (%02x)", event) @@ -223,111 +159,39 @@ func decodeSequenceNumber(d *decode.D) { } func decodeText(d *decode.D) { - d.FieldStrFn("text", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("text", vlstring) } func decodeCopyright(d *decode.D) { - d.FieldStrFn("copyright", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("copyright", vlstring) } func decodeTrackName(d *decode.D) { - d.FieldStrFn("name", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("name", vlstring) } func decodeInstrumentName(d *decode.D) { - d.FieldStrFn("instrument", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("instrument", vlstring) } func decodeLyric(d *decode.D) { - d.FieldStrFn("lyric", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("lyric", vlstring) } func decodeMarker(d *decode.D) { - d.FieldStrFn("marker", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("marker", vlstring) } func decodeCuePoint(d *decode.D) { - d.FieldStrFn("cue", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("cue", vlstring) } func decodeProgramName(d *decode.D) { - d.FieldStrFn("program", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("program", vlstring) } func decodeDeviceName(d *decode.D) { - d.FieldStrFn("device", func(d *decode.D) string { - if data, err := vlf(d); err != nil { - d.Errorf("%v", err) - } else { - return string(data) - } - - return "" - }) + d.FieldStrFn("device", vlstring) } func decodeMIDIChannelPrefix(d *decode.D) { @@ -349,18 +213,18 @@ func decodeMIDIChannelPrefix(d *decode.D) { func decodeMIDIPort(d *decode.D) { d.FieldUintFn("port", func(d *decode.D) uint64 { - channel := uint64(0) + port := uint64(0) if data, err := vlf(d); err != nil { d.Errorf("%v", err) } else { for _, b := range data { - channel <<= 8 - channel |= uint64(b & 0x00ff) + port <<= 8 + port |= uint64(b & 0x00ff) } } - return channel + return port }) } diff --git a/format/midi/midi.go b/format/midi/midi.go index 305dbff2..2a47ca43 100644 --- a/format/midi/midi.go +++ b/format/midi/midi.go @@ -203,6 +203,16 @@ func vlf(d *decode.D) ([]uint8, error) { } } +func vlstring(d *decode.D) string { + if data, err := vlf(d); err != nil { + d.Errorf("%v", err) + } else { + return string(data) + } + + return "" +} + func flush(d *decode.D, format string, args ...any) { d.Errorf(format, args...) diff --git a/format/midi/midievents.go b/format/midi/midievents.go index 3f7e1927..8938622e 100644 --- a/format/midi/midievents.go +++ b/format/midi/midievents.go @@ -18,13 +18,13 @@ const ( ) var midievents = scalar.UintMapSymStr{ - 0x80: "note off", - 0x90: "note on", - 0xa0: "polyphonic pressure", - 0xb0: "controller", - 0xc0: "program change", - 0xd0: "channel pressure", - 0xe0: "pitch bend", + 0x80: "Note Off", + 0x90: "Note On", + 0xa0: "Polyphonic Pressure", + 0xb0: "Controller", + 0xc0: "Program Change", + 0xd0: "Channel Pressure", + 0xe0: "Pitch Bend", } func decodeMIDIEvent(d *decode.D, status uint8, ctx *context) { @@ -42,6 +42,8 @@ func decodeMIDIEvent(d *decode.D, status uint8, ctx *context) { ctx.tick += dt } + event := uint64(status & 0xf0) + channel := func(d *decode.D) uint64 { b := d.PeekBytes(1) if b[0] >= 0x80 { @@ -51,71 +53,37 @@ func decodeMIDIEvent(d *decode.D, status uint8, ctx *context) { return uint64(status & 0x0f) } - event := uint64(status & 0xf0) + midievent := func(name string, f func(d *decode.D)) { + d.FieldStruct(name, func(d *decode.D) { + d.FieldStruct("time", delta) + d.FieldValueUint("event", event, midievents) + d.FieldUintFn("channel", channel) + + f(d) + }) + } switch MidiEventType(event) { case TypeNoteOff: - d.FieldStruct("NoteOff", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldValueUint("event", event, midievents) - d.FieldUintFn("channel", channel) - - decodeNoteOff(d) - }) + midievent("NoteOff", decodeNoteOff) case TypeNoteOn: - d.FieldStruct("NoteOn", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldValueUint("event", event, midievents) - d.FieldUintFn("channel", channel) - - decodeNoteOn(d) - }) + midievent("NoteOn", decodeNoteOn) case TypePolyphonicPressure: - d.FieldStruct("PolyphonicPressure", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldValueUint("event", event, midievents) - d.FieldUintFn("channel", channel) - - decodePolyphonicPressure(d) - }) + midievent("PolyphonicPressure", decodePolyphonicPressure) case TypeController: - d.FieldStruct("Controller", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldValueUint("event", event, midievents) - d.FieldUintFn("channel", channel) - - decodeController(d) - }) + midievent("Controller", decodeController) case TypeProgramChange: - d.FieldStruct("ProgramChange", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldValueUint("event", event, midievents) - d.FieldUintFn("channel", channel) - - decodeProgramChange(d) - }) + midievent("ProgramChange", decodeProgramChange) case TypeChannelPressure: - d.FieldStruct("ChannelPressure", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldValueUint("event", event, midievents) - d.FieldUintFn("channel", channel) - - decodeChannelPressure(d) - }) + midievent("ChannelPressure", decodeChannelPressure) case TypePitchBend: - d.FieldStruct("PitchBend", func(d *decode.D) { - d.FieldStruct("time", delta) - d.FieldValueUint("event", event, midievents) - d.FieldUintFn("channel", channel) - - decodePitchBend(d) - }) + midievent("PitchBend", decodePitchBend) default: flush(d, "unknown MIDI event (%02x)", status&0xf0) diff --git a/format/midi/sysex.go b/format/midi/sysex.go index 3295619b..3e46de5b 100644 --- a/format/midi/sysex.go +++ b/format/midi/sysex.go @@ -8,9 +8,9 @@ import ( ) var sysex = scalar.UintMapSymStr{ - 0x00f0: "sysex message", - 0x80f7: "sysex continuation", - 0x00f7: "sysex escape", + 0x00f0: "Sysex Message", + 0x80f7: "Sysex Continuation", + 0x00f7: "Sysex Escape", } func decodeSysExEvent(d *decode.D, status uint8, ctx *context) { diff --git a/format/midi/testdata/format-0.fqtest b/format/midi/testdata/format-0.fqtest index efa9fb7f..94a8bc4d 100644 --- a/format/midi/testdata/format-0.fqtest +++ b/format/midi/testdata/format-0.fqtest @@ -17,92 +17,92 @@ $ fq -d midi dv format-0.mid | | | time{}: 0x16-0x17 (1) 0x010| 00 | . | delta: 0 0x16-0x17 (1) | | | tick: 0 -0x010| ff 00 | .. | event: "sequence umber" (65280) 0x17-0x19 (2) +0x010| ff 00 | .. | event: "Sequence Number" (65280) 0x17-0x19 (2) 0x010| 02 00 17 | ... | sequenceNumber: 23 0x19-0x1c (3) | | | [1]{}: Text 0x1c-0x2d (17) | | | time{}: 0x1c-0x1d (1) 0x010| 00 | . | delta: 0 0x1c-0x1d (1) | | | tick: 0 -0x010| ff 01 | .. | event: "text" (65281) 0x1d-0x1f (2) +0x010| ff 01 | .. | event: "Text" (65281) 0x1d-0x1f (2) 0x010| 0d| .| text: "This and That" 0x1f-0x2d (14) 0x020|54 68 69 73 20 61 6e 64 20 54 68 61 74 |This and That | | | | [2]{}: Copyright 0x2d-0x35 (8) | | | time{}: 0x2d-0x2e (1) 0x020| 00 | . | delta: 0 0x2d-0x2e (1) | | | tick: 0 -0x020| ff 02| ..| event: "copyright" (65282) 0x2e-0x30 (2) +0x020| ff 02| ..| event: "Copyright" (65282) 0x2e-0x30 (2) 0x030|04 54 68 65 6d |.Them | copyright: "Them" 0x30-0x35 (5) | | | [3]{}: TrackName 0x35-0x41 (12) | | | time{}: 0x35-0x36 (1) 0x030| 00 | . | delta: 0 0x35-0x36 (1) | | | tick: 0 -0x030| ff 03 | .. | event: "track name" (65283) 0x36-0x38 (2) +0x030| ff 03 | .. | event: "Track Name" (65283) 0x36-0x38 (2) 0x030| 08 46 6f 72 6d 61 74 20| .Format | name: "Format 0" 0x38-0x41 (9) 0x040|30 |0 | | | | [4]{}: InstrumentName 0x41-0x4f (14) | | | time{}: 0x41-0x42 (1) 0x040| 00 | . | delta: 0 0x41-0x42 (1) | | | tick: 0 -0x040| ff 04 | .. | event: "instrument name" (65284) 0x42-0x44 (2) +0x040| ff 04 | .. | event: "Instrument Name" (65284) 0x42-0x44 (2) 0x040| 0a 44 69 64 67 65 72 69 64 6f 6f | .Didgeridoo | instrument: "Didgeridoo" 0x44-0x4f (11) | | | [5]{}: Lyric 0x4f-0x5b (12) | | | time{}: 0x4f-0x50 (1) 0x040| 00| .| delta: 0 0x4f-0x50 (1) | | | tick: 0 -0x050|ff 05 |.. | event: "lyric" (65285) 0x50-0x52 (2) +0x050|ff 05 |.. | event: "Lyric" (65285) 0x50-0x52 (2) 0x050| 08 4c 61 2d 6c 61 2d 6c 61 | .La-la-la | lyric: "La-la-la" 0x52-0x5b (9) | | | [6]{}: Marker 0x5b-0x6e (19) | | | time{}: 0x5b-0x5c (1) 0x050| 00 | . | delta: 0 0x5b-0x5c (1) | | | tick: 0 -0x050| ff 06 | .. | event: "marker" (65286) 0x5c-0x5e (2) +0x050| ff 06 | .. | event: "Marker" (65286) 0x5c-0x5e (2) 0x050| 0f 48| .H| marker: "Here Be Dragons" 0x5e-0x6e (16) 0x060|65 72 65 20 42 65 20 44 72 61 67 6f 6e 73 |ere Be Dragons | | | | [7]{}: CuePoint 0x6e-0x7e (16) | | | time{}: 0x6e-0x6f (1) 0x060| 00 | . | delta: 0 0x6e-0x6f (1) | | | tick: 0 -0x060| ff| .| event: "cue point" (65287) 0x6f-0x71 (2) +0x060| ff| .| event: "Cue Point" (65287) 0x6f-0x71 (2) 0x070|07 |. | 0x070| 0c 4d 6f 72 65 20 63 6f 77 62 65 6c 6c | .More cowbell | cue: "More cowbell" 0x71-0x7e (13) | | | [8]{}: ProgramName 0x7e-0x88 (10) | | | time{}: 0x7e-0x7f (1) 0x070| 00 | . | delta: 0 0x7e-0x7f (1) | | | tick: 0 -0x070| ff| .| event: "program name" (65288) 0x7f-0x81 (2) +0x070| ff| .| event: "Program Name" (65288) 0x7f-0x81 (2) 0x080|08 |. | 0x080| 06 45 73 63 61 70 65 | .Escape | program: "Escape" 0x81-0x88 (7) | | | [9]{}: DeviceName 0x88-0x94 (12) | | | time{}: 0x88-0x89 (1) 0x080| 00 | . | delta: 0 0x88-0x89 (1) | | | tick: 0 -0x080| ff 09 | .. | event: "device name" (65289) 0x89-0x8b (2) +0x080| ff 09 | .. | event: "Device Name" (65289) 0x89-0x8b (2) 0x080| 08 54 68 65 54| .TheT| device: "TheThing" 0x8b-0x94 (9) 0x090|68 69 6e 67 |hing | - | | | [10]{}: TypeMIDIChannelPrefix 0x94-0x99 (5) + | | | [10]{}: MIDIChannelPrefix 0x94-0x99 (5) | | | time{}: 0x94-0x95 (1) 0x090| 00 | . | delta: 0 0x94-0x95 (1) | | | tick: 0 -0x090| ff 20 | . | event: "midi channel prefix" (65312) 0x95-0x97 (2) +0x090| ff 20 | . | event: "Midi Channel Prefix" (65312) 0x95-0x97 (2) 0x090| 01 0d | .. | channel: 13 0x97-0x99 (2) - | | | [11]{}: TypeMIDIPort 0x99-0x9e (5) + | | | [11]{}: MIDIPort 0x99-0x9e (5) | | | time{}: 0x99-0x9a (1) 0x090| 00 | . | delta: 0 0x99-0x9a (1) | | | tick: 0 -0x090| ff 21 | .! | event: "midi port" (65313) 0x9a-0x9c (2) +0x090| ff 21 | .! | event: "Midi Port" (65313) 0x9a-0x9c (2) 0x090| 01 70 | .p | port: 112 0x9c-0x9e (2) | | | [12]{}: Tempo 0x9e-0xa5 (7) | | | time{}: 0x9e-0x9f (1) 0x090| 00 | . | delta: 0 0x9e-0x9f (1) | | | tick: 0 -0x090| ff| .| event: "tempo" (65361) 0x9f-0xa1 (2) +0x090| ff| .| event: "Tempo" (65361) 0x9f-0xa1 (2) 0x0a0|51 |Q | 0x0a0| 03 07 a1 20 | ... | tempo: 500000 0xa1-0xa5 (4) | | | [13]{}: SMPTEOffset 0xa5-0xae (9) | | | time{}: 0xa5-0xa6 (1) 0x0a0| 00 | . | delta: 0 0xa5-0xa6 (1) | | | tick: 0 -0x0a0| ff 54 | .T | event: "smpte offset" (65364) 0xa6-0xa8 (2) +0x0a0| ff 54 | .T | event: "Smpte Offset" (65364) 0xa6-0xa8 (2) | | | offset{}: 0xa8-0xae (6) 0x0a0| 05 4d 2d 3b 07 27 | .M-;.' | bytes: "[77 45 59 7 39]" 0xa8-0xae (6) | | | framerate: 25 (1) 0xae-0xae (0) @@ -115,7 +115,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xae-0xaf (1) 0x0a0| 00 | . | delta: 0 0xae-0xaf (1) | | | tick: 0 -0x0a0| ff| .| event: "time signature" (65368) 0xaf-0xb1 (2) +0x0a0| ff| .| event: "Time Signature" (65368) 0xaf-0xb1 (2) 0x0b0|58 |X | | | | signature{}: 0xb1-0xb6 (5) 0x0b0| 04 04 02 18 08 | ..... | bytes: "[4 2 24 8]" 0xb1-0xb6 (5) @@ -127,13 +127,13 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xb6-0xb7 (1) 0x0b0| 00 | . | delta: 0 0xb6-0xb7 (1) | | | tick: 0 -0x0b0| ff 59 | .Y | event: "key signature" (65369) 0xb7-0xb9 (2) +0x0b0| ff 59 | .Y | event: "Key Signature" (65369) 0xb7-0xb9 (2) 0x0b0| 02 00 01 | ... | key: "A minor" (1) 0xb9-0xbc (3) | | | [16]{}: SequencerSpecific 0xbc-0xc6 (10) | | | time{}: 0xbc-0xbd (1) 0x0b0| 00 | . | delta: 0 0xbc-0xbd (1) | | | tick: 0 -0x0b0| ff 7f | .. | event: "sequencer specific event" (65407) 0xbd-0xbf (2) +0x0b0| ff 7f | .. | event: "Sequencer Specific Event" (65407) 0xbd-0xbf (2) | | | info{}: 0xbf-0xc6 (7) 0x0b0| 06| .| bytes: "[0 0 59 58 76 94]" 0xbf-0xc6 (7) 0x0c0|00 00 3b 3a 4c 5e |..;:L^ | @@ -143,7 +143,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xc6-0xc8 (2) 0x0c0| 83 60 | .` | delta: 480 0xc6-0xc8 (2) | | | tick: 0 - | | | event: "note off" (128) + | | | event: "Note Off" (128) 0x0c0| 80 | . | channel: 0 0xc8-0xc9 (1) 0x0c0| 30 | 0 | note: "C3" (48) 0xc9-0xca (1) 0x0c0| 40 | @ | velocity: 64 0xca-0xcb (1) @@ -151,7 +151,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xcb-0xcc (1) 0x0c0| 00 | . | delta: 0 0xcb-0xcc (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x0c0| 90 | . | channel: 0 0xcc-0xcd (1) 0x0c0| 30 | 0 | note: "C3" (48) 0xcd-0xce (1) 0x0c0| 48 | H | velocity: 72 0xce-0xcf (1) @@ -159,7 +159,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xcf-0xd0 (1) 0x0c0| 00| .| delta: 0 0xcf-0xd0 (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x0d0|92 |. | channel: 2 0xd0-0xd1 (1) 0x0d0| 31 | 1 | note: "C♯3/D♭3" (49) 0xd1-0xd2 (1) 0x0d0| 48 | H | velocity: 72 0xd2-0xd3 (1) @@ -167,7 +167,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xd3-0xd4 (1) 0x0d0| 00 | . | delta: 0 0xd3-0xd4 (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) | | | channel: 2 0xd4-0xd4 (0) 0x0d0| 30 | 0 | note: "C3" (48) 0xd4-0xd5 (1) 0x0d0| 64 | d | velocity: 100 0xd5-0xd6 (1) @@ -175,14 +175,14 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xd6-0xd7 (1) 0x0d0| 00 | . | delta: 0 0xd6-0xd7 (1) | | | tick: 480 - | | | event: "polyphonic pressure" (160) + | | | event: "Polyphonic Pressure" (160) 0x0d0| a0 | . | channel: 0 0xd7-0xd8 (1) 0x0d0| 64 | d | pressure: 100 0xd8-0xd9 (1) | | | [22]{}: Controller 0xd9-0xdd (4) | | | time{}: 0xd9-0xda (1) 0x0d0| 00 | . | delta: 0 0xd9-0xda (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0d0| b0 | . | channel: 0 0xda-0xdb (1) 0x0d0| 00 | . | controller: "Bank Select (MSB)" (0) 0xdb-0xdc (1) 0x0d0| 05 | . | value: 5 0xdc-0xdd (1) @@ -190,7 +190,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xdd-0xde (1) 0x0d0| 00 | . | delta: 0 0xdd-0xde (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0d0| b0 | . | channel: 0 0xde-0xdf (1) 0x0d0| 20| | controller: "Bank Select (LSB)" (32) 0xdf-0xe0 (1) 0x0e0|21 |! | value: 33 0xe0-0xe1 (1) @@ -198,7 +198,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xe1-0xe2 (1) 0x0e0| 00 | . | delta: 0 0xe1-0xe2 (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0e0| b0 | . | channel: 0 0xe2-0xe3 (1) 0x0e0| 65 | e | controller: "Registered Parameter Number (MSB)" (101) 0xe3-0xe4 (1) 0x0e0| 00 | . | value: 0 0xe4-0xe5 (1) @@ -206,28 +206,28 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xe5-0xe6 (1) 0x0e0| 00 | . | delta: 0 0xe5-0xe6 (1) | | | tick: 480 - | | | event: "program change" (192) + | | | event: "Program Change" (192) 0x0e0| c0 | . | channel: 0 0xe6-0xe7 (1) 0x0e0| 19 | . | program: 25 0xe7-0xe8 (1) | | | [26]{}: ChannelPressure 0xe8-0xeb (3) | | | time{}: 0xe8-0xe9 (1) 0x0e0| 00 | . | delta: 0 0xe8-0xe9 (1) | | | tick: 480 - | | | event: "channel pressure" (208) + | | | event: "Channel Pressure" (208) 0x0e0| d0 | . | channel: 0 0xe9-0xea (1) 0x0e0| 07 | . | pressure: 7 0xea-0xeb (1) | | | [27]{}: PitchBend 0xeb-0xf0 (5) | | | time{}: 0xeb-0xed (2) 0x0e0| 81 70 | .p | delta: 240 0xeb-0xed (2) | | | tick: 480 - | | | event: "pitch bend" (224) + | | | event: "Pitch Bend" (224) 0x0e0| e0 | . | channel: 0 0xed-0xee (1) 0x0e0| 00 08| ..| bend: 8 0xee-0xf0 (2) | | | [28]{}: SysExMessage 0xf0-0xf8 (8) | | | time{}: 0xf0-0xf1 (1) 0x0f0|00 |. | delta: 0 0xf0-0xf1 (1) | | | tick: 720 -0x0f0| f0 | . | event: "sysex message" (240) 0xf1-0xf2 (1) +0x0f0| f0 | . | event: "Sysex Message" (240) 0xf1-0xf2 (1) 0x0f0| 05 7e 00 09 01 f7 | .~.... | bytes: "[126 0 9 1 247]" 0xf2-0xf8 (6) | | | manufacturer: "Non-RealTime Extensions" ("7E") | | | data: "[0 9 1]" @@ -235,7 +235,7 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xf8-0xf9 (1) 0x0f0| 00 | . | delta: 0 0xf8-0xf9 (1) | | | tick: 720 -0x0f0| f0 | . | event: "sysex message" (240) 0xf9-0xfa (1) +0x0f0| f0 | . | event: "Sysex Message" (240) 0xf9-0xfa (1) 0x0f0| 03 43 12 00 | .C.. | bytes: "[67 18 0]" 0xfa-0xfe (4) | | | manufacturer: "Yamaha" ("43") | | | data: "[18 0]" @@ -244,26 +244,26 @@ $ fq -d midi dv format-0.mid | | | time{}: 0xfe-0x100 (2) 0x0f0| 81 48| .H| delta: 200 0xfe-0x100 (2) | | | tick: 720 -0x100|f7 |. | event: "sysex continuation" (33015) 0x100-0x101 (1) +0x100|f7 |. | event: "Sysex Continuation" (33015) 0x100-0x101 (1) 0x100| 06 43 12 00 43 12 00 | .C..C.. | bytes: "[67 18 0 67 18 0]" 0x101-0x108 (7) 0x100| 06 43 12 00 43 12 00 | .C..C.. | data: "[67 18 0 67 18 0]" 0x101-0x108 (7) | | | [31]{}: SysExContinuation 0x108-0x10f (7) | | | time{}: 0x108-0x109 (1) 0x100| 64 | d | delta: 100 0x108-0x109 (1) | | | tick: 920 -0x100| f7 | . | event: "sysex continuation" (33015) 0x109-0x10a (1) +0x100| f7 | . | event: "Sysex Continuation" (33015) 0x109-0x10a (1) 0x100| 04 43 12 00 f7 | .C... | bytes: "[67 18 0 247]" 0x10a-0x10f (5) 0x100| 04 43 12 00 f7 | .C... | data: "[67 18 0]" 0x10a-0x10f (5) | | | [32]{}: SysExEscape 0x10f-0x114 (5) | | | time{}: 0x10f-0x110 (1) 0x100| 00| .| delta: 0 0x10f-0x110 (1) | | | tick: 1020 -0x110|f7 |. | event: "sysex escape" (247) 0x110-0x111 (1) +0x110|f7 |. | event: "Sysex Escape" (247) 0x110-0x111 (1) 0x110| 02 f3 01 | ... | bytes: "[243 1]" 0x111-0x114 (3) 0x110| 02 f3 01 | ... | data: "[243 1]" 0x111-0x114 (3) | | | [33]{}: EndOfTrack 0x114-0x118 (4) | | | time{}: 0x114-0x115 (1) 0x110| 00 | . | delta: 0 0x114-0x115 (1) | | | tick: 1020 -0x110| ff 2f | ./ | event: "end of track" (65327) 0x115-0x117 (2) +0x110| ff 2f | ./ | event: "End Of Track" (65327) 0x115-0x117 (2) 0x110| 00| | .| | length: 0 0x117-0x118 (1) diff --git a/format/midi/testdata/format-1.fqtest b/format/midi/testdata/format-1.fqtest index 4f09f807..468b20ba 100644 --- a/format/midi/testdata/format-1.fqtest +++ b/format/midi/testdata/format-1.fqtest @@ -17,20 +17,20 @@ $ fq -d midi dv format-1.mid | | | time{}: 0x16-0x17 (1) 0x010| 00 | . | delta: 0 0x16-0x17 (1) | | | tick: 0 -0x010| ff 03 | .. | event: "track name" (65283) 0x17-0x19 (2) +0x010| ff 03 | .. | event: "Track Name" (65283) 0x17-0x19 (2) 0x010| 08 46 6f 72 6d 61 74| .Format| name: "Format 1" 0x19-0x22 (9) 0x020|20 31 | 1 | | | | [1]{}: Tempo 0x22-0x29 (7) | | | time{}: 0x22-0x23 (1) 0x020| 00 | . | delta: 0 0x22-0x23 (1) | | | tick: 0 -0x020| ff 51 | .Q | event: "tempo" (65361) 0x23-0x25 (2) +0x020| ff 51 | .Q | event: "Tempo" (65361) 0x23-0x25 (2) 0x020| 03 07 a1 20 | ... | tempo: 500000 0x25-0x29 (4) | | | [2]{}: TimeSignature 0x29-0x31 (8) | | | time{}: 0x29-0x2a (1) 0x020| 00 | . | delta: 0 0x29-0x2a (1) | | | tick: 0 -0x020| ff 58 | .X | event: "time signature" (65368) 0x2a-0x2c (2) +0x020| ff 58 | .X | event: "Time Signature" (65368) 0x2a-0x2c (2) | | | signature{}: 0x2c-0x31 (5) 0x020| 04 04 02 18| ....| bytes: "[4 2 24 8]" 0x2c-0x31 (5) 0x030|08 |. | @@ -42,7 +42,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0x31-0x32 (1) 0x030| 00 | . | delta: 0 0x31-0x32 (1) | | | tick: 0 -0x030| ff 2f | ./ | event: "end of track" (65327) 0x32-0x34 (2) +0x030| ff 2f | ./ | event: "End Of Track" (65327) 0x32-0x34 (2) 0x030| 00 | . | length: 0 0x34-0x35 (1) | | | [1]{}: track 0x35-0x137 (258) 0x030| 4d 54 72 6b | MTrk | tag: "MTrk" 0x35-0x39 (4) @@ -52,85 +52,85 @@ $ fq -d midi dv format-1.mid | | | time{}: 0x3d-0x3e (1) 0x030| 00 | . | delta: 0 0x3d-0x3e (1) | | | tick: 0 -0x030| ff 00| ..| event: "sequence umber" (65280) 0x3e-0x40 (2) +0x030| ff 00| ..| event: "Sequence Number" (65280) 0x3e-0x40 (2) 0x040|02 00 17 |... | sequenceNumber: 23 0x40-0x43 (3) | | | [1]{}: Text 0x43-0x54 (17) | | | time{}: 0x43-0x44 (1) 0x040| 00 | . | delta: 0 0x43-0x44 (1) | | | tick: 0 -0x040| ff 01 | .. | event: "text" (65281) 0x44-0x46 (2) +0x040| ff 01 | .. | event: "Text" (65281) 0x44-0x46 (2) 0x040| 0d 54 68 69 73 20 61 6e 64 20| .This and | text: "This and That" 0x46-0x54 (14) 0x050|54 68 61 74 |That | | | | [2]{}: Copyright 0x54-0x5c (8) | | | time{}: 0x54-0x55 (1) 0x050| 00 | . | delta: 0 0x54-0x55 (1) | | | tick: 0 -0x050| ff 02 | .. | event: "copyright" (65282) 0x55-0x57 (2) +0x050| ff 02 | .. | event: "Copyright" (65282) 0x55-0x57 (2) 0x050| 04 54 68 65 6d | .Them | copyright: "Them" 0x57-0x5c (5) | | | [3]{}: TrackName 0x5c-0x6f (19) | | | time{}: 0x5c-0x5d (1) 0x050| 00 | . | delta: 0 0x5c-0x5d (1) | | | tick: 0 -0x050| ff 03 | .. | event: "track name" (65283) 0x5d-0x5f (2) +0x050| ff 03 | .. | event: "Track Name" (65283) 0x5d-0x5f (2) 0x050| 0f| .| name: "Acoustic Guitar" 0x5f-0x6f (16) 0x060|41 63 6f 75 73 74 69 63 20 47 75 69 74 61 72 |Acoustic Guitar | | | | [4]{}: InstrumentName 0x6f-0x7d (14) | | | time{}: 0x6f-0x70 (1) 0x060| 00| .| delta: 0 0x6f-0x70 (1) | | | tick: 0 -0x070|ff 04 |.. | event: "instrument name" (65284) 0x70-0x72 (2) +0x070|ff 04 |.. | event: "Instrument Name" (65284) 0x70-0x72 (2) 0x070| 0a 44 69 64 67 65 72 69 64 6f 6f | .Didgeridoo | instrument: "Didgeridoo" 0x72-0x7d (11) | | | [5]{}: Lyric 0x7d-0x89 (12) | | | time{}: 0x7d-0x7e (1) 0x070| 00 | . | delta: 0 0x7d-0x7e (1) | | | tick: 0 -0x070| ff 05| ..| event: "lyric" (65285) 0x7e-0x80 (2) +0x070| ff 05| ..| event: "Lyric" (65285) 0x7e-0x80 (2) 0x080|08 4c 61 2d 6c 61 2d 6c 61 |.La-la-la | lyric: "La-la-la" 0x80-0x89 (9) | | | [6]{}: Marker 0x89-0x9c (19) | | | time{}: 0x89-0x8a (1) 0x080| 00 | . | delta: 0 0x89-0x8a (1) | | | tick: 0 -0x080| ff 06 | .. | event: "marker" (65286) 0x8a-0x8c (2) +0x080| ff 06 | .. | event: "Marker" (65286) 0x8a-0x8c (2) 0x080| 0f 48 65 72| .Her| marker: "Here Be Dragons" 0x8c-0x9c (16) 0x090|65 20 42 65 20 44 72 61 67 6f 6e 73 |e Be Dragons | | | | [7]{}: CuePoint 0x9c-0xac (16) | | | time{}: 0x9c-0x9d (1) 0x090| 00 | . | delta: 0 0x9c-0x9d (1) | | | tick: 0 -0x090| ff 07 | .. | event: "cue point" (65287) 0x9d-0x9f (2) +0x090| ff 07 | .. | event: "Cue Point" (65287) 0x9d-0x9f (2) 0x090| 0c| .| cue: "More cowbell" 0x9f-0xac (13) 0x0a0|4d 6f 72 65 20 63 6f 77 62 65 6c 6c |More cowbell | | | | [8]{}: ProgramName 0xac-0xb6 (10) | | | time{}: 0xac-0xad (1) 0x0a0| 00 | . | delta: 0 0xac-0xad (1) | | | tick: 0 -0x0a0| ff 08 | .. | event: "program name" (65288) 0xad-0xaf (2) +0x0a0| ff 08 | .. | event: "Program Name" (65288) 0xad-0xaf (2) 0x0a0| 06| .| program: "Escape" 0xaf-0xb6 (7) 0x0b0|45 73 63 61 70 65 |Escape | | | | [9]{}: DeviceName 0xb6-0xc2 (12) | | | time{}: 0xb6-0xb7 (1) 0x0b0| 00 | . | delta: 0 0xb6-0xb7 (1) | | | tick: 0 -0x0b0| ff 09 | .. | event: "device name" (65289) 0xb7-0xb9 (2) +0x0b0| ff 09 | .. | event: "Device Name" (65289) 0xb7-0xb9 (2) 0x0b0| 08 54 68 65 54 68 69| .TheThi| device: "TheThing" 0xb9-0xc2 (9) 0x0c0|6e 67 |ng | - | | | [10]{}: TypeMIDIChannelPrefix 0xc2-0xc7 (5) + | | | [10]{}: MIDIChannelPrefix 0xc2-0xc7 (5) | | | time{}: 0xc2-0xc3 (1) 0x0c0| 00 | . | delta: 0 0xc2-0xc3 (1) | | | tick: 0 -0x0c0| ff 20 | . | event: "midi channel prefix" (65312) 0xc3-0xc5 (2) +0x0c0| ff 20 | . | event: "Midi Channel Prefix" (65312) 0xc3-0xc5 (2) 0x0c0| 01 0d | .. | channel: 13 0xc5-0xc7 (2) - | | | [11]{}: TypeMIDIPort 0xc7-0xcc (5) + | | | [11]{}: MIDIPort 0xc7-0xcc (5) | | | time{}: 0xc7-0xc8 (1) 0x0c0| 00 | . | delta: 0 0xc7-0xc8 (1) | | | tick: 0 -0x0c0| ff 21 | .! | event: "midi port" (65313) 0xc8-0xca (2) +0x0c0| ff 21 | .! | event: "Midi Port" (65313) 0xc8-0xca (2) 0x0c0| 01 70 | .p | port: 112 0xca-0xcc (2) | | | [12]{}: SMPTEOffset 0xcc-0xd5 (9) | | | time{}: 0xcc-0xcd (1) 0x0c0| 00 | . | delta: 0 0xcc-0xcd (1) | | | tick: 0 -0x0c0| ff 54 | .T | event: "smpte offset" (65364) 0xcd-0xcf (2) +0x0c0| ff 54 | .T | event: "Smpte Offset" (65364) 0xcd-0xcf (2) | | | offset{}: 0xcf-0xd5 (6) 0x0c0| 05| .| bytes: "[77 45 59 7 39]" 0xcf-0xd5 (6) 0x0d0|4d 2d 3b 07 27 |M-;.' | @@ -144,13 +144,13 @@ $ fq -d midi dv format-1.mid | | | time{}: 0xd5-0xd6 (1) 0x0d0| 00 | . | delta: 0 0xd5-0xd6 (1) | | | tick: 0 -0x0d0| ff 59 | .Y | event: "key signature" (65369) 0xd6-0xd8 (2) +0x0d0| ff 59 | .Y | event: "Key Signature" (65369) 0xd6-0xd8 (2) 0x0d0| 02 00 01 | ... | key: "A minor" (1) 0xd8-0xdb (3) | | | [14]{}: SequencerSpecific 0xdb-0xe5 (10) | | | time{}: 0xdb-0xdc (1) 0x0d0| 00 | . | delta: 0 0xdb-0xdc (1) | | | tick: 0 -0x0d0| ff 7f | .. | event: "sequencer specific event" (65407) 0xdc-0xde (2) +0x0d0| ff 7f | .. | event: "Sequencer Specific Event" (65407) 0xdc-0xde (2) | | | info{}: 0xde-0xe5 (7) 0x0d0| 06 00| ..| bytes: "[0 0 59 58 76 94]" 0xde-0xe5 (7) 0x0e0|00 3b 3a 4c 5e |.;:L^ | @@ -160,7 +160,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0xe5-0xe7 (2) 0x0e0| 83 60 | .` | delta: 480 0xe5-0xe7 (2) | | | tick: 0 - | | | event: "note off" (128) + | | | event: "Note Off" (128) 0x0e0| 80 | . | channel: 0 0xe7-0xe8 (1) 0x0e0| 30 | 0 | note: "C3" (48) 0xe8-0xe9 (1) 0x0e0| 40 | @ | velocity: 64 0xe9-0xea (1) @@ -168,7 +168,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0xea-0xeb (1) 0x0e0| 00 | . | delta: 0 0xea-0xeb (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x0e0| 90 | . | channel: 0 0xeb-0xec (1) 0x0e0| 30 | 0 | note: "C3" (48) 0xec-0xed (1) 0x0e0| 48 | H | velocity: 72 0xed-0xee (1) @@ -176,7 +176,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0xee-0xef (1) 0x0e0| 00 | . | delta: 0 0xee-0xef (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x0e0| 92| .| channel: 2 0xef-0xf0 (1) 0x0f0|31 |1 | note: "C♯3/D♭3" (49) 0xf0-0xf1 (1) 0x0f0| 48 | H | velocity: 72 0xf1-0xf2 (1) @@ -184,7 +184,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0xf2-0xf3 (1) 0x0f0| 00 | . | delta: 0 0xf2-0xf3 (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) | | | channel: 2 0xf3-0xf3 (0) 0x0f0| 30 | 0 | note: "C3" (48) 0xf3-0xf4 (1) 0x0f0| 64 | d | velocity: 100 0xf4-0xf5 (1) @@ -192,14 +192,14 @@ $ fq -d midi dv format-1.mid | | | time{}: 0xf5-0xf6 (1) 0x0f0| 00 | . | delta: 0 0xf5-0xf6 (1) | | | tick: 480 - | | | event: "polyphonic pressure" (160) + | | | event: "Polyphonic Pressure" (160) 0x0f0| a0 | . | channel: 0 0xf6-0xf7 (1) 0x0f0| 64 | d | pressure: 100 0xf7-0xf8 (1) | | | [20]{}: Controller 0xf8-0xfc (4) | | | time{}: 0xf8-0xf9 (1) 0x0f0| 00 | . | delta: 0 0xf8-0xf9 (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0f0| b0 | . | channel: 0 0xf9-0xfa (1) 0x0f0| 00 | . | controller: "Bank Select (MSB)" (0) 0xfa-0xfb (1) 0x0f0| 05 | . | value: 5 0xfb-0xfc (1) @@ -207,7 +207,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0xfc-0xfd (1) 0x0f0| 00 | . | delta: 0 0xfc-0xfd (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0f0| b0 | . | channel: 0 0xfd-0xfe (1) 0x0f0| 20 | | controller: "Bank Select (LSB)" (32) 0xfe-0xff (1) 0x0f0| 21| !| value: 33 0xff-0x100 (1) @@ -215,7 +215,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0x100-0x101 (1) 0x100|00 |. | delta: 0 0x100-0x101 (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x100| b0 | . | channel: 0 0x101-0x102 (1) 0x100| 65 | e | controller: "Registered Parameter Number (MSB)" (101) 0x102-0x103 (1) 0x100| 00 | . | value: 0 0x103-0x104 (1) @@ -223,28 +223,28 @@ $ fq -d midi dv format-1.mid | | | time{}: 0x104-0x105 (1) 0x100| 00 | . | delta: 0 0x104-0x105 (1) | | | tick: 480 - | | | event: "program change" (192) + | | | event: "Program Change" (192) 0x100| c0 | . | channel: 0 0x105-0x106 (1) 0x100| 19 | . | program: 25 0x106-0x107 (1) | | | [24]{}: ChannelPressure 0x107-0x10a (3) | | | time{}: 0x107-0x108 (1) 0x100| 00 | . | delta: 0 0x107-0x108 (1) | | | tick: 480 - | | | event: "channel pressure" (208) + | | | event: "Channel Pressure" (208) 0x100| d0 | . | channel: 0 0x108-0x109 (1) 0x100| 07 | . | pressure: 7 0x109-0x10a (1) | | | [25]{}: PitchBend 0x10a-0x10f (5) | | | time{}: 0x10a-0x10c (2) 0x100| 81 70 | .p | delta: 240 0x10a-0x10c (2) | | | tick: 480 - | | | event: "pitch bend" (224) + | | | event: "Pitch Bend" (224) 0x100| e0 | . | channel: 0 0x10c-0x10d (1) 0x100| 00 08 | .. | bend: 8 0x10d-0x10f (2) | | | [26]{}: SysExMessage 0x10f-0x117 (8) | | | time{}: 0x10f-0x110 (1) 0x100| 00| .| delta: 0 0x10f-0x110 (1) | | | tick: 720 -0x110|f0 |. | event: "sysex message" (240) 0x110-0x111 (1) +0x110|f0 |. | event: "Sysex Message" (240) 0x110-0x111 (1) 0x110| 05 7e 00 09 01 f7 | .~.... | bytes: "[126 0 9 1 247]" 0x111-0x117 (6) | | | manufacturer: "Non-RealTime Extensions" ("7E") | | | data: "[0 9 1]" @@ -252,7 +252,7 @@ $ fq -d midi dv format-1.mid | | | time{}: 0x117-0x118 (1) 0x110| 00 | . | delta: 0 0x117-0x118 (1) | | | tick: 720 -0x110| f0 | . | event: "sysex message" (240) 0x118-0x119 (1) +0x110| f0 | . | event: "Sysex Message" (240) 0x118-0x119 (1) 0x110| 03 43 12 00 | .C.. | bytes: "[67 18 0]" 0x119-0x11d (4) | | | manufacturer: "Yamaha" ("43") | | | data: "[18 0]" @@ -261,26 +261,26 @@ $ fq -d midi dv format-1.mid | | | time{}: 0x11d-0x11f (2) 0x110| 81 48 | .H | delta: 200 0x11d-0x11f (2) | | | tick: 720 -0x110| f7| .| event: "sysex continuation" (33015) 0x11f-0x120 (1) +0x110| f7| .| event: "Sysex Continuation" (33015) 0x11f-0x120 (1) 0x120|06 43 12 00 43 12 00 |.C..C.. | bytes: "[67 18 0 67 18 0]" 0x120-0x127 (7) 0x120|06 43 12 00 43 12 00 |.C..C.. | data: "[67 18 0 67 18 0]" 0x120-0x127 (7) | | | [29]{}: SysExContinuation 0x127-0x12e (7) | | | time{}: 0x127-0x128 (1) 0x120| 64 | d | delta: 100 0x127-0x128 (1) | | | tick: 920 -0x120| f7 | . | event: "sysex continuation" (33015) 0x128-0x129 (1) +0x120| f7 | . | event: "Sysex Continuation" (33015) 0x128-0x129 (1) 0x120| 04 43 12 00 f7 | .C... | bytes: "[67 18 0 247]" 0x129-0x12e (5) 0x120| 04 43 12 00 f7 | .C... | data: "[67 18 0]" 0x129-0x12e (5) | | | [30]{}: SysExEscape 0x12e-0x133 (5) | | | time{}: 0x12e-0x12f (1) 0x120| 00 | . | delta: 0 0x12e-0x12f (1) | | | tick: 1020 -0x120| f7| .| event: "sysex escape" (247) 0x12f-0x130 (1) +0x120| f7| .| event: "Sysex Escape" (247) 0x12f-0x130 (1) 0x130|02 f3 01 |... | bytes: "[243 1]" 0x130-0x133 (3) 0x130|02 f3 01 |... | data: "[243 1]" 0x130-0x133 (3) | | | [31]{}: EndOfTrack 0x133-0x137 (4) | | | time{}: 0x133-0x134 (1) 0x130| 00 | . | delta: 0 0x133-0x134 (1) | | | tick: 1020 -0x130| ff 2f | ./ | event: "end of track" (65327) 0x134-0x136 (2) +0x130| ff 2f | ./ | event: "End Of Track" (65327) 0x134-0x136 (2) 0x130| 00| | .| | length: 0 0x136-0x137 (1) diff --git a/format/midi/testdata/format-2.fqtest b/format/midi/testdata/format-2.fqtest index da478768..d73dfd0c 100644 --- a/format/midi/testdata/format-2.fqtest +++ b/format/midi/testdata/format-2.fqtest @@ -17,89 +17,89 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x16-0x17 (1) 0x010| 00 | . | delta: 0 0x16-0x17 (1) | | | tick: 0 -0x010| ff 00 | .. | event: "sequence umber" (65280) 0x17-0x19 (2) +0x010| ff 00 | .. | event: "Sequence Number" (65280) 0x17-0x19 (2) 0x010| 02 00 17 | ... | sequenceNumber: 23 0x19-0x1c (3) | | | [1]{}: Text 0x1c-0x2d (17) | | | time{}: 0x1c-0x1d (1) 0x010| 00 | . | delta: 0 0x1c-0x1d (1) | | | tick: 0 -0x010| ff 01 | .. | event: "text" (65281) 0x1d-0x1f (2) +0x010| ff 01 | .. | event: "Text" (65281) 0x1d-0x1f (2) 0x010| 0d| .| text: "This and That" 0x1f-0x2d (14) 0x020|54 68 69 73 20 61 6e 64 20 54 68 61 74 |This and That | | | | [2]{}: Copyright 0x2d-0x35 (8) | | | time{}: 0x2d-0x2e (1) 0x020| 00 | . | delta: 0 0x2d-0x2e (1) | | | tick: 0 -0x020| ff 02| ..| event: "copyright" (65282) 0x2e-0x30 (2) +0x020| ff 02| ..| event: "Copyright" (65282) 0x2e-0x30 (2) 0x030|04 54 68 65 6d |.Them | copyright: "Them" 0x30-0x35 (5) | | | [3]{}: TrackName 0x35-0x43 (14) | | | time{}: 0x35-0x36 (1) 0x030| 00 | . | delta: 0 0x35-0x36 (1) | | | tick: 0 -0x030| ff 03 | .. | event: "track name" (65283) 0x36-0x38 (2) +0x030| ff 03 | .. | event: "Track Name" (65283) 0x36-0x38 (2) 0x030| 0a 4c 65 66 74 20 54 72| .Left Tr| name: "Left Track" 0x38-0x43 (11) 0x040|61 63 6b |ack | | | | [4]{}: InstrumentName 0x43-0x51 (14) | | | time{}: 0x43-0x44 (1) 0x040| 00 | . | delta: 0 0x43-0x44 (1) | | | tick: 0 -0x040| ff 04 | .. | event: "instrument name" (65284) 0x44-0x46 (2) +0x040| ff 04 | .. | event: "Instrument Name" (65284) 0x44-0x46 (2) 0x040| 0a 44 69 64 67 65 72 69 64 6f| .Didgerido| instrument: "Didgeridoo" 0x46-0x51 (11) 0x050|6f |o | | | | [5]{}: Lyric 0x51-0x5d (12) | | | time{}: 0x51-0x52 (1) 0x050| 00 | . | delta: 0 0x51-0x52 (1) | | | tick: 0 -0x050| ff 05 | .. | event: "lyric" (65285) 0x52-0x54 (2) +0x050| ff 05 | .. | event: "Lyric" (65285) 0x52-0x54 (2) 0x050| 08 4c 61 2d 6c 61 2d 6c 61 | .La-la-la | lyric: "La-la-la" 0x54-0x5d (9) | | | [6]{}: Marker 0x5d-0x70 (19) | | | time{}: 0x5d-0x5e (1) 0x050| 00 | . | delta: 0 0x5d-0x5e (1) | | | tick: 0 -0x050| ff 06| ..| event: "marker" (65286) 0x5e-0x60 (2) +0x050| ff 06| ..| event: "Marker" (65286) 0x5e-0x60 (2) 0x060|0f 48 65 72 65 20 42 65 20 44 72 61 67 6f 6e 73|.Here Be Dragons| marker: "Here Be Dragons" 0x60-0x70 (16) | | | [7]{}: CuePoint 0x70-0x80 (16) | | | time{}: 0x70-0x71 (1) 0x070|00 |. | delta: 0 0x70-0x71 (1) | | | tick: 0 -0x070| ff 07 | .. | event: "cue point" (65287) 0x71-0x73 (2) +0x070| ff 07 | .. | event: "Cue Point" (65287) 0x71-0x73 (2) 0x070| 0c 4d 6f 72 65 20 63 6f 77 62 65 6c 6c| .More cowbell| cue: "More cowbell" 0x73-0x80 (13) | | | [8]{}: ProgramName 0x80-0x8a (10) | | | time{}: 0x80-0x81 (1) 0x080|00 |. | delta: 0 0x80-0x81 (1) | | | tick: 0 -0x080| ff 08 | .. | event: "program name" (65288) 0x81-0x83 (2) +0x080| ff 08 | .. | event: "Program Name" (65288) 0x81-0x83 (2) 0x080| 06 45 73 63 61 70 65 | .Escape | program: "Escape" 0x83-0x8a (7) | | | [9]{}: DeviceName 0x8a-0x96 (12) | | | time{}: 0x8a-0x8b (1) 0x080| 00 | . | delta: 0 0x8a-0x8b (1) | | | tick: 0 -0x080| ff 09 | .. | event: "device name" (65289) 0x8b-0x8d (2) +0x080| ff 09 | .. | event: "Device Name" (65289) 0x8b-0x8d (2) 0x080| 08 54 68| .Th| device: "TheThing" 0x8d-0x96 (9) 0x090|65 54 68 69 6e 67 |eThing | - | | | [10]{}: TypeMIDIChannelPrefix 0x96-0x9b (5) + | | | [10]{}: MIDIChannelPrefix 0x96-0x9b (5) | | | time{}: 0x96-0x97 (1) 0x090| 00 | . | delta: 0 0x96-0x97 (1) | | | tick: 0 -0x090| ff 20 | . | event: "midi channel prefix" (65312) 0x97-0x99 (2) +0x090| ff 20 | . | event: "Midi Channel Prefix" (65312) 0x97-0x99 (2) 0x090| 01 0d | .. | channel: 13 0x99-0x9b (2) - | | | [11]{}: TypeMIDIPort 0x9b-0xa0 (5) + | | | [11]{}: MIDIPort 0x9b-0xa0 (5) | | | time{}: 0x9b-0x9c (1) 0x090| 00 | . | delta: 0 0x9b-0x9c (1) | | | tick: 0 -0x090| ff 21 | .! | event: "midi port" (65313) 0x9c-0x9e (2) +0x090| ff 21 | .! | event: "Midi Port" (65313) 0x9c-0x9e (2) 0x090| 01 70| .p| port: 112 0x9e-0xa0 (2) | | | [12]{}: Tempo 0xa0-0xa7 (7) | | | time{}: 0xa0-0xa1 (1) 0x0a0|00 |. | delta: 0 0xa0-0xa1 (1) | | | tick: 0 -0x0a0| ff 51 | .Q | event: "tempo" (65361) 0xa1-0xa3 (2) +0x0a0| ff 51 | .Q | event: "Tempo" (65361) 0xa1-0xa3 (2) 0x0a0| 03 07 a1 20 | ... | tempo: 500000 0xa3-0xa7 (4) | | | [13]{}: SMPTEOffset 0xa7-0xb0 (9) | | | time{}: 0xa7-0xa8 (1) 0x0a0| 00 | . | delta: 0 0xa7-0xa8 (1) | | | tick: 0 -0x0a0| ff 54 | .T | event: "smpte offset" (65364) 0xa8-0xaa (2) +0x0a0| ff 54 | .T | event: "Smpte Offset" (65364) 0xa8-0xaa (2) | | | offset{}: 0xaa-0xb0 (6) 0x0a0| 05 4d 2d 3b 07 27| .M-;.'| bytes: "[77 45 59 7 39]" 0xaa-0xb0 (6) | | | framerate: 25 (1) 0xb0-0xb0 (0) @@ -112,7 +112,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xb0-0xb1 (1) 0x0b0|00 |. | delta: 0 0xb0-0xb1 (1) | | | tick: 0 -0x0b0| ff 58 | .X | event: "time signature" (65368) 0xb1-0xb3 (2) +0x0b0| ff 58 | .X | event: "Time Signature" (65368) 0xb1-0xb3 (2) | | | signature{}: 0xb3-0xb8 (5) 0x0b0| 04 04 02 18 08 | ..... | bytes: "[4 2 24 8]" 0xb3-0xb8 (5) | | | numerator: 4 @@ -123,13 +123,13 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xb8-0xb9 (1) 0x0b0| 00 | . | delta: 0 0xb8-0xb9 (1) | | | tick: 0 -0x0b0| ff 59 | .Y | event: "key signature" (65369) 0xb9-0xbb (2) +0x0b0| ff 59 | .Y | event: "Key Signature" (65369) 0xb9-0xbb (2) 0x0b0| 02 00 01 | ... | key: "A minor" (1) 0xbb-0xbe (3) | | | [16]{}: SequencerSpecific 0xbe-0xc8 (10) | | | time{}: 0xbe-0xbf (1) 0x0b0| 00 | . | delta: 0 0xbe-0xbf (1) | | | tick: 0 -0x0b0| ff| .| event: "sequencer specific event" (65407) 0xbf-0xc1 (2) +0x0b0| ff| .| event: "Sequencer Specific Event" (65407) 0xbf-0xc1 (2) 0x0c0|7f |. | | | | info{}: 0xc1-0xc8 (7) 0x0c0| 06 00 00 3b 3a 4c 5e | ...;:L^ | bytes: "[0 0 59 58 76 94]" 0xc1-0xc8 (7) @@ -139,7 +139,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xc8-0xca (2) 0x0c0| 83 60 | .` | delta: 480 0xc8-0xca (2) | | | tick: 0 - | | | event: "note off" (128) + | | | event: "Note Off" (128) 0x0c0| 80 | . | channel: 0 0xca-0xcb (1) 0x0c0| 30 | 0 | note: "C3" (48) 0xcb-0xcc (1) 0x0c0| 40 | @ | velocity: 64 0xcc-0xcd (1) @@ -147,7 +147,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xcd-0xce (1) 0x0c0| 00 | . | delta: 0 0xcd-0xce (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x0c0| 90 | . | channel: 0 0xce-0xcf (1) 0x0c0| 30| 0| note: "C3" (48) 0xcf-0xd0 (1) 0x0d0|48 |H | velocity: 72 0xd0-0xd1 (1) @@ -155,7 +155,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xd1-0xd2 (1) 0x0d0| 00 | . | delta: 0 0xd1-0xd2 (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x0d0| 92 | . | channel: 2 0xd2-0xd3 (1) 0x0d0| 31 | 1 | note: "C♯3/D♭3" (49) 0xd3-0xd4 (1) 0x0d0| 48 | H | velocity: 72 0xd4-0xd5 (1) @@ -163,7 +163,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xd5-0xd6 (1) 0x0d0| 00 | . | delta: 0 0xd5-0xd6 (1) | | | tick: 480 - | | | event: "note on" (144) + | | | event: "Note On" (144) | | | channel: 2 0xd6-0xd6 (0) 0x0d0| 30 | 0 | note: "C3" (48) 0xd6-0xd7 (1) 0x0d0| 64 | d | velocity: 100 0xd7-0xd8 (1) @@ -171,14 +171,14 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xd8-0xd9 (1) 0x0d0| 00 | . | delta: 0 0xd8-0xd9 (1) | | | tick: 480 - | | | event: "polyphonic pressure" (160) + | | | event: "Polyphonic Pressure" (160) 0x0d0| a0 | . | channel: 0 0xd9-0xda (1) 0x0d0| 64 | d | pressure: 100 0xda-0xdb (1) | | | [22]{}: Controller 0xdb-0xdf (4) | | | time{}: 0xdb-0xdc (1) 0x0d0| 00 | . | delta: 0 0xdb-0xdc (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0d0| b0 | . | channel: 0 0xdc-0xdd (1) 0x0d0| 00 | . | controller: "Bank Select (MSB)" (0) 0xdd-0xde (1) 0x0d0| 05 | . | value: 5 0xde-0xdf (1) @@ -186,7 +186,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xdf-0xe0 (1) 0x0d0| 00| .| delta: 0 0xdf-0xe0 (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0e0|b0 |. | channel: 0 0xe0-0xe1 (1) 0x0e0| 20 | | controller: "Bank Select (LSB)" (32) 0xe1-0xe2 (1) 0x0e0| 21 | ! | value: 33 0xe2-0xe3 (1) @@ -194,7 +194,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xe3-0xe4 (1) 0x0e0| 00 | . | delta: 0 0xe3-0xe4 (1) | | | tick: 480 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0e0| b0 | . | channel: 0 0xe4-0xe5 (1) 0x0e0| 65 | e | controller: "Registered Parameter Number (MSB)" (101) 0xe5-0xe6 (1) 0x0e0| 00 | . | value: 0 0xe6-0xe7 (1) @@ -202,28 +202,28 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xe7-0xe8 (1) 0x0e0| 00 | . | delta: 0 0xe7-0xe8 (1) | | | tick: 480 - | | | event: "program change" (192) + | | | event: "Program Change" (192) 0x0e0| c0 | . | channel: 0 0xe8-0xe9 (1) 0x0e0| 19 | . | program: 25 0xe9-0xea (1) | | | [26]{}: ChannelPressure 0xea-0xed (3) | | | time{}: 0xea-0xeb (1) 0x0e0| 00 | . | delta: 0 0xea-0xeb (1) | | | tick: 480 - | | | event: "channel pressure" (208) + | | | event: "Channel Pressure" (208) 0x0e0| d0 | . | channel: 0 0xeb-0xec (1) 0x0e0| 07 | . | pressure: 7 0xec-0xed (1) | | | [27]{}: PitchBend 0xed-0xf2 (5) | | | time{}: 0xed-0xef (2) 0x0e0| 81 70 | .p | delta: 240 0xed-0xef (2) | | | tick: 480 - | | | event: "pitch bend" (224) + | | | event: "Pitch Bend" (224) 0x0e0| e0| .| channel: 0 0xef-0xf0 (1) 0x0f0|00 08 |.. | bend: 8 0xf0-0xf2 (2) | | | [28]{}: SysExMessage 0xf2-0xfa (8) | | | time{}: 0xf2-0xf3 (1) 0x0f0| 00 | . | delta: 0 0xf2-0xf3 (1) | | | tick: 720 -0x0f0| f0 | . | event: "sysex message" (240) 0xf3-0xf4 (1) +0x0f0| f0 | . | event: "Sysex Message" (240) 0xf3-0xf4 (1) 0x0f0| 05 7e 00 09 01 f7 | .~.... | bytes: "[126 0 9 1 247]" 0xf4-0xfa (6) | | | manufacturer: "Non-RealTime Extensions" ("7E") | | | data: "[0 9 1]" @@ -231,7 +231,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0xfa-0xfb (1) 0x0f0| 00 | . | delta: 0 0xfa-0xfb (1) | | | tick: 720 -0x0f0| f0 | . | event: "sysex message" (240) 0xfb-0xfc (1) +0x0f0| f0 | . | event: "Sysex Message" (240) 0xfb-0xfc (1) 0x0f0| 03 43 12 00| .C..| bytes: "[67 18 0]" 0xfc-0x100 (4) | | | manufacturer: "Yamaha" ("43") | | | data: "[18 0]" @@ -240,14 +240,14 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x100-0x102 (2) 0x100|81 48 |.H | delta: 200 0x100-0x102 (2) | | | tick: 720 -0x100| f7 | . | event: "sysex continuation" (33015) 0x102-0x103 (1) +0x100| f7 | . | event: "Sysex Continuation" (33015) 0x102-0x103 (1) 0x100| 06 43 12 00 43 12 00 | .C..C.. | bytes: "[67 18 0 67 18 0]" 0x103-0x10a (7) 0x100| 06 43 12 00 43 12 00 | .C..C.. | data: "[67 18 0 67 18 0]" 0x103-0x10a (7) | | | [31]{}: SysExContinuation 0x10a-0x111 (7) | | | time{}: 0x10a-0x10b (1) 0x100| 64 | d | delta: 100 0x10a-0x10b (1) | | | tick: 920 -0x100| f7 | . | event: "sysex continuation" (33015) 0x10b-0x10c (1) +0x100| f7 | . | event: "Sysex Continuation" (33015) 0x10b-0x10c (1) 0x100| 04 43 12 00| .C..| bytes: "[67 18 0 247]" 0x10c-0x111 (5) 0x110|f7 |. | 0x100| 04 43 12 00| .C..| data: "[67 18 0]" 0x10c-0x111 (5) @@ -256,14 +256,14 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x111-0x112 (1) 0x110| 00 | . | delta: 0 0x111-0x112 (1) | | | tick: 1020 -0x110| f7 | . | event: "sysex escape" (247) 0x112-0x113 (1) +0x110| f7 | . | event: "Sysex Escape" (247) 0x112-0x113 (1) 0x110| 02 f3 01 | ... | bytes: "[243 1]" 0x113-0x116 (3) 0x110| 02 f3 01 | ... | data: "[243 1]" 0x113-0x116 (3) | | | [33]{}: EndOfTrack 0x116-0x11a (4) | | | time{}: 0x116-0x117 (1) 0x110| 00 | . | delta: 0 0x116-0x117 (1) | | | tick: 1020 -0x110| ff 2f | ./ | event: "end of track" (65327) 0x117-0x119 (2) +0x110| ff 2f | ./ | event: "End Of Track" (65327) 0x117-0x119 (2) 0x110| 00 | . | length: 0 0x119-0x11a (1) | | | [1]{}: track 0x11a-0x227 (269) 0x110| 4d 54 72 6b | MTrk | tag: "MTrk" 0x11a-0x11e (4) @@ -274,7 +274,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x122-0x123 (1) 0x120| 00 | . | delta: 0 0x122-0x123 (1) | | | tick: 0 -0x120| f0 | . | event: "sysex message" (240) 0x123-0x124 (1) +0x120| f0 | . | event: "Sysex Message" (240) 0x123-0x124 (1) 0x120| 05 7e 00 09 01 f7 | .~.... | bytes: "[126 0 9 1 247]" 0x124-0x12a (6) | | | manufacturer: "Non-RealTime Extensions" ("7E") | | | data: "[0 9 1]" @@ -282,7 +282,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x12a-0x12b (1) 0x120| 00 | . | delta: 0 0x12a-0x12b (1) | | | tick: 0 -0x120| f0 | . | event: "sysex message" (240) 0x12b-0x12c (1) +0x120| f0 | . | event: "Sysex Message" (240) 0x12b-0x12c (1) 0x120| 03 43 12 00| .C..| bytes: "[67 18 0]" 0x12c-0x130 (4) | | | manufacturer: "Yamaha" ("43") | | | data: "[18 0]" @@ -291,14 +291,14 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x130-0x132 (2) 0x130|81 48 |.H | delta: 200 0x130-0x132 (2) | | | tick: 0 -0x130| f7 | . | event: "sysex continuation" (33015) 0x132-0x133 (1) +0x130| f7 | . | event: "Sysex Continuation" (33015) 0x132-0x133 (1) 0x130| 06 43 12 00 43 12 00 | .C..C.. | bytes: "[67 18 0 67 18 0]" 0x133-0x13a (7) 0x130| 06 43 12 00 43 12 00 | .C..C.. | data: "[67 18 0 67 18 0]" 0x133-0x13a (7) | | | [3]{}: SysExContinuation 0x13a-0x141 (7) | | | time{}: 0x13a-0x13b (1) 0x130| 64 | d | delta: 100 0x13a-0x13b (1) | | | tick: 200 -0x130| f7 | . | event: "sysex continuation" (33015) 0x13b-0x13c (1) +0x130| f7 | . | event: "Sysex Continuation" (33015) 0x13b-0x13c (1) 0x130| 04 43 12 00| .C..| bytes: "[67 18 0 247]" 0x13c-0x141 (5) 0x140|f7 |. | 0x130| 04 43 12 00| .C..| data: "[67 18 0]" 0x13c-0x141 (5) @@ -307,35 +307,35 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x141-0x142 (1) 0x140| 00 | . | delta: 0 0x141-0x142 (1) | | | tick: 300 -0x140| f7 | . | event: "sysex escape" (247) 0x142-0x143 (1) +0x140| f7 | . | event: "Sysex Escape" (247) 0x142-0x143 (1) 0x140| 02 f3 01 | ... | bytes: "[243 1]" 0x143-0x146 (3) 0x140| 02 f3 01 | ... | data: "[243 1]" 0x143-0x146 (3) | | | [5]{}: PitchBend 0x146-0x14b (5) | | | time{}: 0x146-0x148 (2) 0x140| 81 70 | .p | delta: 240 0x146-0x148 (2) | | | tick: 300 - | | | event: "pitch bend" (224) + | | | event: "Pitch Bend" (224) 0x140| e0 | . | channel: 0 0x148-0x149 (1) 0x140| 00 08 | .. | bend: 8 0x149-0x14b (2) | | | [6]{}: ChannelPressure 0x14b-0x14e (3) | | | time{}: 0x14b-0x14c (1) 0x140| 00 | . | delta: 0 0x14b-0x14c (1) | | | tick: 540 - | | | event: "channel pressure" (208) + | | | event: "Channel Pressure" (208) 0x140| d0 | . | channel: 0 0x14c-0x14d (1) 0x140| 07 | . | pressure: 7 0x14d-0x14e (1) | | | [7]{}: ProgramChange 0x14e-0x151 (3) | | | time{}: 0x14e-0x14f (1) 0x140| 00 | . | delta: 0 0x14e-0x14f (1) | | | tick: 540 - | | | event: "program change" (192) + | | | event: "Program Change" (192) 0x140| c0| .| channel: 0 0x14f-0x150 (1) 0x150|19 |. | program: 25 0x150-0x151 (1) | | | [8]{}: Controller 0x151-0x155 (4) | | | time{}: 0x151-0x152 (1) 0x150| 00 | . | delta: 0 0x151-0x152 (1) | | | tick: 540 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x150| b0 | . | channel: 0 0x152-0x153 (1) 0x150| 65 | e | controller: "Registered Parameter Number (MSB)" (101) 0x153-0x154 (1) 0x150| 00 | . | value: 0 0x154-0x155 (1) @@ -343,7 +343,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x155-0x156 (1) 0x150| 00 | . | delta: 0 0x155-0x156 (1) | | | tick: 540 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x150| b0 | . | channel: 0 0x156-0x157 (1) 0x150| 20 | | controller: "Bank Select (LSB)" (32) 0x157-0x158 (1) 0x150| 21 | ! | value: 33 0x158-0x159 (1) @@ -351,7 +351,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x159-0x15a (1) 0x150| 00 | . | delta: 0 0x159-0x15a (1) | | | tick: 540 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x150| b0 | . | channel: 0 0x15a-0x15b (1) 0x150| 00 | . | controller: "Bank Select (MSB)" (0) 0x15b-0x15c (1) 0x150| 05 | . | value: 5 0x15c-0x15d (1) @@ -359,14 +359,14 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x15d-0x15e (1) 0x150| 00 | . | delta: 0 0x15d-0x15e (1) | | | tick: 540 - | | | event: "polyphonic pressure" (160) + | | | event: "Polyphonic Pressure" (160) 0x150| a0 | . | channel: 0 0x15e-0x15f (1) 0x150| 64| d| pressure: 100 0x15f-0x160 (1) | | | [12]{}: NoteOn 0x160-0x164 (4) | | | time{}: 0x160-0x161 (1) 0x160|00 |. | delta: 0 0x160-0x161 (1) | | | tick: 540 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x160| 90 | . | channel: 0 0x161-0x162 (1) 0x160| 30 | 0 | note: "C3" (48) 0x162-0x163 (1) 0x160| 48 | H | velocity: 72 0x163-0x164 (1) @@ -374,7 +374,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x164-0x165 (1) 0x160| 00 | . | delta: 0 0x164-0x165 (1) | | | tick: 540 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x160| 92 | . | channel: 2 0x165-0x166 (1) 0x160| 31 | 1 | note: "C♯3/D♭3" (49) 0x166-0x167 (1) 0x160| 48 | H | velocity: 72 0x167-0x168 (1) @@ -382,7 +382,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x168-0x169 (1) 0x160| 00 | . | delta: 0 0x168-0x169 (1) | | | tick: 540 - | | | event: "note on" (144) + | | | event: "Note On" (144) | | | channel: 2 0x169-0x169 (0) 0x160| 30 | 0 | note: "C3" (48) 0x169-0x16a (1) 0x160| 64 | d | velocity: 100 0x16a-0x16b (1) @@ -390,7 +390,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x16b-0x16d (2) 0x160| 83 60 | .` | delta: 480 0x16b-0x16d (2) | | | tick: 540 - | | | event: "note off" (128) + | | | event: "Note Off" (128) 0x160| 80 | . | channel: 0 0x16d-0x16e (1) 0x160| 30 | 0 | note: "C3" (48) 0x16e-0x16f (1) 0x160| 40| @| velocity: 64 0x16f-0x170 (1) @@ -398,7 +398,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x170-0x171 (1) 0x170|00 |. | delta: 0 0x170-0x171 (1) | | | tick: 1020 -0x170| ff 7f | .. | event: "sequencer specific event" (65407) 0x171-0x173 (2) +0x170| ff 7f | .. | event: "Sequencer Specific Event" (65407) 0x171-0x173 (2) | | | info{}: 0x173-0x17a (7) 0x170| 06 00 00 3b 3a 4c 5e | ...;:L^ | bytes: "[0 0 59 58 76 94]" 0x173-0x17a (7) | | | manufacturer: "Mark Of The Unicorn (MOTU)" ("003B") @@ -407,13 +407,13 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x17a-0x17b (1) 0x170| 00 | . | delta: 0 0x17a-0x17b (1) | | | tick: 1020 -0x170| ff 59 | .Y | event: "key signature" (65369) 0x17b-0x17d (2) +0x170| ff 59 | .Y | event: "Key Signature" (65369) 0x17b-0x17d (2) 0x170| 02 00 01| ...| key: "A minor" (1) 0x17d-0x180 (3) | | | [18]{}: TimeSignature 0x180-0x188 (8) | | | time{}: 0x180-0x181 (1) 0x180|00 |. | delta: 0 0x180-0x181 (1) | | | tick: 1020 -0x180| ff 58 | .X | event: "time signature" (65368) 0x181-0x183 (2) +0x180| ff 58 | .X | event: "Time Signature" (65368) 0x181-0x183 (2) | | | signature{}: 0x183-0x188 (5) 0x180| 04 04 02 18 08 | ..... | bytes: "[4 2 24 8]" 0x183-0x188 (5) | | | numerator: 4 @@ -424,7 +424,7 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x188-0x189 (1) 0x180| 00 | . | delta: 0 0x188-0x189 (1) | | | tick: 1020 -0x180| ff 54 | .T | event: "smpte offset" (65364) 0x189-0x18b (2) +0x180| ff 54 | .T | event: "Smpte Offset" (65364) 0x189-0x18b (2) | | | offset{}: 0x18b-0x191 (6) 0x180| 05 4d 2d 3b 07| .M-;.| bytes: "[77 45 59 7 39]" 0x18b-0x191 (6) 0x190|27 |' | @@ -438,90 +438,90 @@ $ fq -d midi dv format-2.mid | | | time{}: 0x191-0x192 (1) 0x190| 00 | . | delta: 0 0x191-0x192 (1) | | | tick: 1020 -0x190| ff 51 | .Q | event: "tempo" (65361) 0x192-0x194 (2) +0x190| ff 51 | .Q | event: "Tempo" (65361) 0x192-0x194 (2) 0x190| 03 07 a1 20 | ... | tempo: 500000 0x194-0x198 (4) - | | | [21]{}: TypeMIDIPort 0x198-0x19d (5) + | | | [21]{}: MIDIPort 0x198-0x19d (5) | | | time{}: 0x198-0x199 (1) 0x190| 00 | . | delta: 0 0x198-0x199 (1) | | | tick: 1020 -0x190| ff 21 | .! | event: "midi port" (65313) 0x199-0x19b (2) +0x190| ff 21 | .! | event: "Midi Port" (65313) 0x199-0x19b (2) 0x190| 01 70 | .p | port: 112 0x19b-0x19d (2) - | | | [22]{}: TypeMIDIChannelPrefix 0x19d-0x1a2 (5) + | | | [22]{}: MIDIChannelPrefix 0x19d-0x1a2 (5) | | | time{}: 0x19d-0x19e (1) 0x190| 00 | . | delta: 0 0x19d-0x19e (1) | | | tick: 1020 -0x190| ff 20| . | event: "midi channel prefix" (65312) 0x19e-0x1a0 (2) +0x190| ff 20| . | event: "Midi Channel Prefix" (65312) 0x19e-0x1a0 (2) 0x1a0|01 0d |.. | channel: 13 0x1a0-0x1a2 (2) | | | [23]{}: DeviceName 0x1a2-0x1ae (12) | | | time{}: 0x1a2-0x1a3 (1) 0x1a0| 00 | . | delta: 0 0x1a2-0x1a3 (1) | | | tick: 1020 -0x1a0| ff 09 | .. | event: "device name" (65289) 0x1a3-0x1a5 (2) +0x1a0| ff 09 | .. | event: "Device Name" (65289) 0x1a3-0x1a5 (2) 0x1a0| 08 54 68 65 54 68 69 6e 67 | .TheThing | device: "TheThing" 0x1a5-0x1ae (9) | | | [24]{}: ProgramName 0x1ae-0x1b8 (10) | | | time{}: 0x1ae-0x1af (1) 0x1a0| 00 | . | delta: 0 0x1ae-0x1af (1) | | | tick: 1020 -0x1a0| ff| .| event: "program name" (65288) 0x1af-0x1b1 (2) +0x1a0| ff| .| event: "Program Name" (65288) 0x1af-0x1b1 (2) 0x1b0|08 |. | 0x1b0| 06 45 73 63 61 70 65 | .Escape | program: "Escape" 0x1b1-0x1b8 (7) | | | [25]{}: CuePoint 0x1b8-0x1c8 (16) | | | time{}: 0x1b8-0x1b9 (1) 0x1b0| 00 | . | delta: 0 0x1b8-0x1b9 (1) | | | tick: 1020 -0x1b0| ff 07 | .. | event: "cue point" (65287) 0x1b9-0x1bb (2) +0x1b0| ff 07 | .. | event: "Cue Point" (65287) 0x1b9-0x1bb (2) 0x1b0| 0c 4d 6f 72 65| .More| cue: "More cowbell" 0x1bb-0x1c8 (13) 0x1c0|20 63 6f 77 62 65 6c 6c | cowbell | | | | [26]{}: Marker 0x1c8-0x1db (19) | | | time{}: 0x1c8-0x1c9 (1) 0x1c0| 00 | . | delta: 0 0x1c8-0x1c9 (1) | | | tick: 1020 -0x1c0| ff 06 | .. | event: "marker" (65286) 0x1c9-0x1cb (2) +0x1c0| ff 06 | .. | event: "Marker" (65286) 0x1c9-0x1cb (2) 0x1c0| 0f 48 65 72 65| .Here| marker: "Here Be Dragons" 0x1cb-0x1db (16) 0x1d0|20 42 65 20 44 72 61 67 6f 6e 73 | Be Dragons | | | | [27]{}: Lyric 0x1db-0x1e7 (12) | | | time{}: 0x1db-0x1dc (1) 0x1d0| 00 | . | delta: 0 0x1db-0x1dc (1) | | | tick: 1020 -0x1d0| ff 05 | .. | event: "lyric" (65285) 0x1dc-0x1de (2) +0x1d0| ff 05 | .. | event: "Lyric" (65285) 0x1dc-0x1de (2) 0x1d0| 08 4c| .L| lyric: "La-la-la" 0x1de-0x1e7 (9) 0x1e0|61 2d 6c 61 2d 6c 61 |a-la-la | | | | [28]{}: InstrumentName 0x1e7-0x1f5 (14) | | | time{}: 0x1e7-0x1e8 (1) 0x1e0| 00 | . | delta: 0 0x1e7-0x1e8 (1) | | | tick: 1020 -0x1e0| ff 04 | .. | event: "instrument name" (65284) 0x1e8-0x1ea (2) +0x1e0| ff 04 | .. | event: "Instrument Name" (65284) 0x1e8-0x1ea (2) 0x1e0| 0a 44 69 64 67 65| .Didge| instrument: "Didgeridoo" 0x1ea-0x1f5 (11) 0x1f0|72 69 64 6f 6f |ridoo | | | | [29]{}: TrackName 0x1f5-0x204 (15) | | | time{}: 0x1f5-0x1f6 (1) 0x1f0| 00 | . | delta: 0 0x1f5-0x1f6 (1) | | | tick: 1020 -0x1f0| ff 03 | .. | event: "track name" (65283) 0x1f6-0x1f8 (2) +0x1f0| ff 03 | .. | event: "Track Name" (65283) 0x1f6-0x1f8 (2) 0x1f0| 0b 52 69 67 68 74 20 54| .Right T| name: "Right Track" 0x1f8-0x204 (12) 0x200|72 61 63 6b |rack | | | | [30]{}: Copyright 0x204-0x20c (8) | | | time{}: 0x204-0x205 (1) 0x200| 00 | . | delta: 0 0x204-0x205 (1) | | | tick: 1020 -0x200| ff 02 | .. | event: "copyright" (65282) 0x205-0x207 (2) +0x200| ff 02 | .. | event: "Copyright" (65282) 0x205-0x207 (2) 0x200| 04 54 68 65 6d | .Them | copyright: "Them" 0x207-0x20c (5) | | | [31]{}: Text 0x20c-0x21d (17) | | | time{}: 0x20c-0x20d (1) 0x200| 00 | . | delta: 0 0x20c-0x20d (1) | | | tick: 1020 -0x200| ff 01 | .. | event: "text" (65281) 0x20d-0x20f (2) +0x200| ff 01 | .. | event: "Text" (65281) 0x20d-0x20f (2) 0x200| 0d| .| text: "This and That" 0x20f-0x21d (14) 0x210|54 68 69 73 20 61 6e 64 20 54 68 61 74 |This and That | | | | [32]{}: SequenceNumber 0x21d-0x223 (6) | | | time{}: 0x21d-0x21e (1) 0x210| 00 | . | delta: 0 0x21d-0x21e (1) | | | tick: 1020 -0x210| ff 00| ..| event: "sequence umber" (65280) 0x21e-0x220 (2) +0x210| ff 00| ..| event: "Sequence Number" (65280) 0x21e-0x220 (2) 0x220|02 00 17 |... | sequenceNumber: 23 0x220-0x223 (3) | | | [33]{}: EndOfTrack 0x223-0x227 (4) | | | time{}: 0x223-0x224 (1) 0x220| 00 | . | delta: 0 0x223-0x224 (1) | | | tick: 1020 -0x220| ff 2f | ./ | event: "end of track" (65327) 0x224-0x226 (2) +0x220| ff 2f | ./ | event: "End Of Track" (65327) 0x224-0x226 (2) 0x220| 00| | .| | length: 0 0x226-0x227 (1) diff --git a/format/midi/testdata/keys.fqtest b/format/midi/testdata/keys.fqtest index c179ada3..2edfa8d4 100644 --- a/format/midi/testdata/keys.fqtest +++ b/format/midi/testdata/keys.fqtest @@ -17,212 +17,212 @@ $ ./fq -d midi d key-signatures.mid | | | time{}: 0x010| 00 | . | delta: 0 | | | tick: 0 -0x010| ff 03 | .. | event: "track name" (65283) +0x010| ff 03 | .. | event: "Track Name" (65283) 0x010| 0e 4b 65 79 20 53 69| .Key Si| name: "Key Signatures" 0x020|67 6e 61 74 75 72 65 73 |gnatures | | | | [1]{}: KeySignature | | | time{}: 0x020| 00 | . | delta: 0 | | | tick: 0 -0x020| ff 59 | .Y | event: "key signature" (65369) +0x020| ff 59 | .Y | event: "Key Signature" (65369) 0x020| 02 00 00 | ... | key: "C major" (0) | | | [2]{}: KeySignature | | | time{}: 0x020| 8f 00| ..| delta: 1920 | | | tick: 0 -0x030|ff 59 |.Y | event: "key signature" (65369) +0x030|ff 59 |.Y | event: "Key Signature" (65369) 0x030| 02 01 00 | ... | key: "G major" (256) | | | [3]{}: KeySignature | | | time{}: 0x030| 8f 00 | .. | delta: 1920 | | | tick: 1920 -0x030| ff 59 | .Y | event: "key signature" (65369) +0x030| ff 59 | .Y | event: "Key Signature" (65369) 0x030| 02 02 00 | ... | key: "D major" (512) | | | [4]{}: KeySignature | | | time{}: 0x030| 8f 00 | .. | delta: 1920 | | | tick: 3840 -0x030| ff 59| .Y| event: "key signature" (65369) +0x030| ff 59| .Y| event: "Key Signature" (65369) 0x040|02 03 00 |... | key: "A major" (768) | | | [5]{}: KeySignature | | | time{}: 0x040| 8f 00 | .. | delta: 1920 | | | tick: 5760 -0x040| ff 59 | .Y | event: "key signature" (65369) +0x040| ff 59 | .Y | event: "Key Signature" (65369) 0x040| 02 04 00 | ... | key: "E major" (1024) | | | [6]{}: KeySignature | | | time{}: 0x040| 8f 00 | .. | delta: 1920 | | | tick: 7680 -0x040| ff 59 | .Y | event: "key signature" (65369) +0x040| ff 59 | .Y | event: "Key Signature" (65369) 0x040| 02 05| ..| key: "B major" (1280) 0x050|00 |. | | | | [7]{}: KeySignature | | | time{}: 0x050| 8f 00 | .. | delta: 1920 | | | tick: 9600 -0x050| ff 59 | .Y | event: "key signature" (65369) +0x050| ff 59 | .Y | event: "Key Signature" (65369) 0x050| 02 06 00 | ... | key: "F♯ major" (1536) | | | [8]{}: KeySignature | | | time{}: 0x050| 8f 00 | .. | delta: 1920 | | | tick: 11520 -0x050| ff 59 | .Y | event: "key signature" (65369) +0x050| ff 59 | .Y | event: "Key Signature" (65369) 0x050| 02 07 00 | ... | key: "C♯ major" (1792) | | | [9]{}: KeySignature | | | time{}: 0x050| 8f| .| delta: 1920 0x060|00 |. | | | | tick: 13440 -0x060| ff 59 | .Y | event: "key signature" (65369) +0x060| ff 59 | .Y | event: "Key Signature" (65369) 0x060| 02 00 00 | ... | key: "C major" (0) | | | [10]{}: KeySignature | | | time{}: 0x060| 8f 00 | .. | delta: 1920 | | | tick: 15360 -0x060| ff 59 | .Y | event: "key signature" (65369) +0x060| ff 59 | .Y | event: "Key Signature" (65369) 0x060| 02 ff 00 | ... | key: "F major" (65280) | | | [11]{}: KeySignature | | | time{}: 0x060| 8f 00 | .. | delta: 1920 | | | tick: 17280 -0x060| ff| .| event: "key signature" (65369) +0x060| ff| .| event: "Key Signature" (65369) 0x070|59 |Y | 0x070| 02 fe 00 | ... | key: "B♭ major" (65024) | | | [12]{}: KeySignature | | | time{}: 0x070| 8f 00 | .. | delta: 1920 | | | tick: 19200 -0x070| ff 59 | .Y | event: "key signature" (65369) +0x070| ff 59 | .Y | event: "Key Signature" (65369) 0x070| 02 fd 00 | ... | key: "E♭ major" (64768) | | | [13]{}: KeySignature | | | time{}: 0x070| 8f 00 | .. | delta: 1920 | | | tick: 21120 -0x070| ff 59 | .Y | event: "key signature" (65369) +0x070| ff 59 | .Y | event: "Key Signature" (65369) 0x070| 02| .| key: "A♭ major" (64512) 0x080|fc 00 |.. | | | | [14]{}: KeySignature | | | time{}: 0x080| 8f 00 | .. | delta: 1920 | | | tick: 23040 -0x080| ff 59 | .Y | event: "key signature" (65369) +0x080| ff 59 | .Y | event: "Key Signature" (65369) 0x080| 02 fb 00 | ... | key: "D♭ major" (64256) | | | [15]{}: KeySignature | | | time{}: 0x080| 8f 00 | .. | delta: 1920 | | | tick: 24960 -0x080| ff 59 | .Y | event: "key signature" (65369) +0x080| ff 59 | .Y | event: "Key Signature" (65369) 0x080| 02 fa 00| ...| key: "G♭ major" (64000) | | | [16]{}: KeySignature | | | time{}: 0x090|8f 00 |.. | delta: 1920 | | | tick: 26880 -0x090| ff 59 | .Y | event: "key signature" (65369) +0x090| ff 59 | .Y | event: "Key Signature" (65369) 0x090| 02 f9 00 | ... | key: "C♭ major" (63744) | | | [17]{}: KeySignature | | | time{}: 0x090| 8f 00 | .. | delta: 1920 | | | tick: 28800 -0x090| ff 59 | .Y | event: "key signature" (65369) +0x090| ff 59 | .Y | event: "Key Signature" (65369) 0x090| 02 00 01 | ... | key: "A minor" (1) | | | [18]{}: KeySignature | | | time{}: 0x090| 8f 00| ..| delta: 1920 | | | tick: 30720 -0x0a0|ff 59 |.Y | event: "key signature" (65369) +0x0a0|ff 59 |.Y | event: "Key Signature" (65369) 0x0a0| 02 01 01 | ... | key: "E minor" (257) | | | [19]{}: KeySignature | | | time{}: 0x0a0| 8f 00 | .. | delta: 1920 | | | tick: 32640 -0x0a0| ff 59 | .Y | event: "key signature" (65369) +0x0a0| ff 59 | .Y | event: "Key Signature" (65369) 0x0a0| 02 02 01 | ... | key: "B minor" (513) | | | [20]{}: KeySignature | | | time{}: 0x0a0| 8f 00 | .. | delta: 1920 | | | tick: 34560 -0x0a0| ff 59| .Y| event: "key signature" (65369) +0x0a0| ff 59| .Y| event: "Key Signature" (65369) 0x0b0|02 03 01 |... | key: "F♯ minor" (769) | | | [21]{}: KeySignature | | | time{}: 0x0b0| 8f 00 | .. | delta: 1920 | | | tick: 36480 -0x0b0| ff 59 | .Y | event: "key signature" (65369) +0x0b0| ff 59 | .Y | event: "Key Signature" (65369) 0x0b0| 02 04 01 | ... | key: "C♯ minor" (1025) | | | [22]{}: KeySignature | | | time{}: 0x0b0| 8f 00 | .. | delta: 1920 | | | tick: 38400 -0x0b0| ff 59 | .Y | event: "key signature" (65369) +0x0b0| ff 59 | .Y | event: "Key Signature" (65369) 0x0b0| 02 05| ..| key: "G♯ minor" (1281) 0x0c0|01 |. | | | | [23]{}: KeySignature | | | time{}: 0x0c0| 8f 00 | .. | delta: 1920 | | | tick: 40320 -0x0c0| ff 59 | .Y | event: "key signature" (65369) +0x0c0| ff 59 | .Y | event: "Key Signature" (65369) 0x0c0| 02 06 01 | ... | key: "D♯ minor" (1537) | | | [24]{}: KeySignature | | | time{}: 0x0c0| 8f 00 | .. | delta: 1920 | | | tick: 42240 -0x0c0| ff 59 | .Y | event: "key signature" (65369) +0x0c0| ff 59 | .Y | event: "Key Signature" (65369) 0x0c0| 02 07 01 | ... | key: "A♯ minor" (1793) | | | [25]{}: KeySignature | | | time{}: 0x0c0| 8f| .| delta: 1920 0x0d0|00 |. | | | | tick: 44160 -0x0d0| ff 59 | .Y | event: "key signature" (65369) +0x0d0| ff 59 | .Y | event: "Key Signature" (65369) 0x0d0| 02 00 01 | ... | key: "A minor" (1) | | | [26]{}: KeySignature | | | time{}: 0x0d0| 8f 00 | .. | delta: 1920 | | | tick: 46080 -0x0d0| ff 59 | .Y | event: "key signature" (65369) +0x0d0| ff 59 | .Y | event: "Key Signature" (65369) 0x0d0| 02 ff 01 | ... | key: "D minor" (65281) | | | [27]{}: KeySignature | | | time{}: 0x0d0| 9e 00 | .. | delta: 3840 | | | tick: 48000 -0x0d0| ff| .| event: "key signature" (65369) +0x0d0| ff| .| event: "Key Signature" (65369) 0x0e0|59 |Y | 0x0e0| 02 fe 01 | ... | key: "G minor" (65025) | | | [28]{}: KeySignature | | | time{}: 0x0e0| 8f 00 | .. | delta: 1920 | | | tick: 51840 -0x0e0| ff 59 | .Y | event: "key signature" (65369) +0x0e0| ff 59 | .Y | event: "Key Signature" (65369) 0x0e0| 02 fd 01 | ... | key: "C minor" (64769) | | | [29]{}: KeySignature | | | time{}: 0x0e0| 8f 00 | .. | delta: 1920 | | | tick: 53760 -0x0e0| ff 59 | .Y | event: "key signature" (65369) +0x0e0| ff 59 | .Y | event: "Key Signature" (65369) 0x0e0| 02| .| key: "F minor" (64513) 0x0f0|fc 01 |.. | | | | [30]{}: KeySignature | | | time{}: 0x0f0| 8f 00 | .. | delta: 1920 | | | tick: 55680 -0x0f0| ff 59 | .Y | event: "key signature" (65369) +0x0f0| ff 59 | .Y | event: "Key Signature" (65369) 0x0f0| 02 fb 01 | ... | key: "B♭ minor" (64257) | | | [31]{}: KeySignature | | | time{}: 0x0f0| 8f 00 | .. | delta: 1920 | | | tick: 57600 -0x0f0| ff 59 | .Y | event: "key signature" (65369) +0x0f0| ff 59 | .Y | event: "Key Signature" (65369) 0x0f0| 02 fa 01| ...| key: "E♭ minor" (64001) | | | [32]{}: KeySignature | | | time{}: 0x100|8f 00 |.. | delta: 1920 | | | tick: 59520 -0x100| ff 59 | .Y | event: "key signature" (65369) +0x100| ff 59 | .Y | event: "Key Signature" (65369) 0x100| 02 f9 01 | ... | key: "A♭ minor" (63745) | | | [33]{}: EndOfTrack | | | time{}: 0x100| 00 | . | delta: 0 | | | tick: 61440 -0x100| ff 2f | ./ | event: "end of track" (65327) +0x100| ff 2f | ./ | event: "End Of Track" (65327) 0x100| 00| | .| | length: 0 diff --git a/format/midi/testdata/tempo.fqtest b/format/midi/testdata/tempo.fqtest index 7c19db40..c9c5ca22 100644 --- a/format/midi/testdata/tempo.fqtest +++ b/format/midi/testdata/tempo.fqtest @@ -1 +1,3 @@ $ fq -d midi '.. | select(.event=="Tempo")?.tempo' test.mid + |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef| +0x20| 03 07 a1 20 | ... |.tracks[0].events[1].tempo: 500000 diff --git a/format/midi/testdata/test.fqtest b/format/midi/testdata/test.fqtest index b5aee22c..6dba6fc7 100644 --- a/format/midi/testdata/test.fqtest +++ b/format/midi/testdata/test.fqtest @@ -17,20 +17,20 @@ $ fq -d midi dv test.mid | | | time{}: 0x16-0x17 (1) 0x010| 00 | . | delta: 0 0x16-0x17 (1) | | | tick: 0 -0x010| ff 03 | .. | event: "track name" (65283) 0x17-0x19 (2) +0x010| ff 03 | .. | event: "Track Name" (65283) 0x17-0x19 (2) 0x010| 0b 52 65 66 65 72 65| .Refere| name: "Reference-1" 0x19-0x25 (12) 0x020|6e 63 65 2d 31 |nce-1 | | | | [1]{}: Tempo 0x25-0x2c (7) | | | time{}: 0x25-0x26 (1) 0x020| 00 | . | delta: 0 0x25-0x26 (1) | | | tick: 0 -0x020| ff 51 | .Q | event: "tempo" (65361) 0x26-0x28 (2) +0x020| ff 51 | .Q | event: "Tempo" (65361) 0x26-0x28 (2) 0x020| 03 07 a1 20 | ... | tempo: 500000 0x28-0x2c (4) | | | [2]{}: TimeSignature 0x2c-0x34 (8) | | | time{}: 0x2c-0x2d (1) 0x020| 00 | . | delta: 0 0x2c-0x2d (1) | | | tick: 0 -0x020| ff 58 | .X | event: "time signature" (65368) 0x2d-0x2f (2) +0x020| ff 58 | .X | event: "Time Signature" (65368) 0x2d-0x2f (2) | | | signature{}: 0x2f-0x34 (5) 0x020| 04| .| bytes: "[4 2 24 8]" 0x2f-0x34 (5) 0x030|04 02 18 08 |.... | @@ -42,7 +42,7 @@ $ fq -d midi dv test.mid | | | time{}: 0x34-0x35 (1) 0x030| 00 | . | delta: 0 0x34-0x35 (1) | | | tick: 0 -0x030| ff 54 | .T | event: "smpte offset" (65364) 0x35-0x37 (2) +0x030| ff 54 | .T | event: "Smpte Offset" (65364) 0x35-0x37 (2) | | | offset{}: 0x37-0x3d (6) 0x030| 05 4d 2d 3b 07 27 | .M-;.' | bytes: "[77 45 59 7 39]" 0x37-0x3d (6) | | | framerate: 25 (1) 0x3d-0x3d (0) @@ -55,7 +55,7 @@ $ fq -d midi dv test.mid | | | time{}: 0x3d-0x3e (1) 0x030| 00 | . | delta: 0 0x3d-0x3e (1) | | | tick: 0 -0x030| ff 2f| ./| event: "end of track" (65327) 0x3e-0x40 (2) +0x030| ff 2f| ./| event: "End Of Track" (65327) 0x3e-0x40 (2) 0x040|00 |. | length: 0 0x40-0x41 (1) | | | [1]{}: track 0x41-0x13a (249) 0x040| 4d 54 72 6b | MTrk | tag: "MTrk" 0x41-0x45 (4) @@ -65,92 +65,92 @@ $ fq -d midi dv test.mid | | | time{}: 0x49-0x4a (1) 0x040| 00 | . | delta: 0 0x49-0x4a (1) | | | tick: 0 -0x040| ff 00 | .. | event: "sequence umber" (65280) 0x4a-0x4c (2) +0x040| ff 00 | .. | event: "Sequence Number" (65280) 0x4a-0x4c (2) 0x040| 02 00 17 | ... | sequenceNumber: 23 0x4c-0x4f (3) | | | [1]{}: Text 0x4f-0x60 (17) | | | time{}: 0x4f-0x50 (1) 0x040| 00| .| delta: 0 0x4f-0x50 (1) | | | tick: 0 -0x050|ff 01 |.. | event: "text" (65281) 0x50-0x52 (2) +0x050|ff 01 |.. | event: "Text" (65281) 0x50-0x52 (2) 0x050| 0d 54 68 69 73 20 61 6e 64 20 54 68 61 74| .This and That| text: "This and That" 0x52-0x60 (14) | | | [2]{}: Copyright 0x60-0x68 (8) | | | time{}: 0x60-0x61 (1) 0x060|00 |. | delta: 0 0x60-0x61 (1) | | | tick: 0 -0x060| ff 02 | .. | event: "copyright" (65282) 0x61-0x63 (2) +0x060| ff 02 | .. | event: "Copyright" (65282) 0x61-0x63 (2) 0x060| 04 54 68 65 6d | .Them | copyright: "Them" 0x63-0x68 (5) | | | [3]{}: TrackName 0x68-0x7b (19) | | | time{}: 0x68-0x69 (1) 0x060| 00 | . | delta: 0 0x68-0x69 (1) | | | tick: 0 -0x060| ff 03 | .. | event: "track name" (65283) 0x69-0x6b (2) +0x060| ff 03 | .. | event: "Track Name" (65283) 0x69-0x6b (2) 0x060| 0f 41 63 6f 75| .Acou| name: "Acoustic Guitar" 0x6b-0x7b (16) 0x070|73 74 69 63 20 47 75 69 74 61 72 |stic Guitar | | | | [4]{}: InstrumentName 0x7b-0x89 (14) | | | time{}: 0x7b-0x7c (1) 0x070| 00 | . | delta: 0 0x7b-0x7c (1) | | | tick: 0 -0x070| ff 04 | .. | event: "instrument name" (65284) 0x7c-0x7e (2) +0x070| ff 04 | .. | event: "Instrument Name" (65284) 0x7c-0x7e (2) 0x070| 0a 44| .D| instrument: "Didgeridoo" 0x7e-0x89 (11) 0x080|69 64 67 65 72 69 64 6f 6f |idgeridoo | | | | [5]{}: Lyric 0x89-0x95 (12) | | | time{}: 0x89-0x8a (1) 0x080| 00 | . | delta: 0 0x89-0x8a (1) | | | tick: 0 -0x080| ff 05 | .. | event: "lyric" (65285) 0x8a-0x8c (2) +0x080| ff 05 | .. | event: "Lyric" (65285) 0x8a-0x8c (2) 0x080| 08 4c 61 2d| .La-| lyric: "La-la-la" 0x8c-0x95 (9) 0x090|6c 61 2d 6c 61 |la-la | | | | [6]{}: Marker 0x95-0xa8 (19) | | | time{}: 0x95-0x96 (1) 0x090| 00 | . | delta: 0 0x95-0x96 (1) | | | tick: 0 -0x090| ff 06 | .. | event: "marker" (65286) 0x96-0x98 (2) +0x090| ff 06 | .. | event: "Marker" (65286) 0x96-0x98 (2) 0x090| 0f 48 65 72 65 20 42 65| .Here Be| marker: "Here Be Dragons" 0x98-0xa8 (16) 0x0a0|20 44 72 61 67 6f 6e 73 | Dragons | | | | [7]{}: CuePoint 0xa8-0xb8 (16) | | | time{}: 0xa8-0xa9 (1) 0x0a0| 00 | . | delta: 0 0xa8-0xa9 (1) | | | tick: 0 -0x0a0| ff 07 | .. | event: "cue point" (65287) 0xa9-0xab (2) +0x0a0| ff 07 | .. | event: "Cue Point" (65287) 0xa9-0xab (2) 0x0a0| 0c 4d 6f 72 65| .More| cue: "More cowbell" 0xab-0xb8 (13) 0x0b0|20 63 6f 77 62 65 6c 6c | cowbell | | | | [8]{}: ProgramName 0xb8-0xc2 (10) | | | time{}: 0xb8-0xb9 (1) 0x0b0| 00 | . | delta: 0 0xb8-0xb9 (1) | | | tick: 0 -0x0b0| ff 08 | .. | event: "program name" (65288) 0xb9-0xbb (2) +0x0b0| ff 08 | .. | event: "Program Name" (65288) 0xb9-0xbb (2) 0x0b0| 06 45 73 63 61| .Esca| program: "Escape" 0xbb-0xc2 (7) 0x0c0|70 65 |pe | | | | [9]{}: DeviceName 0xc2-0xce (12) | | | time{}: 0xc2-0xc3 (1) 0x0c0| 00 | . | delta: 0 0xc2-0xc3 (1) | | | tick: 0 -0x0c0| ff 09 | .. | event: "device name" (65289) 0xc3-0xc5 (2) +0x0c0| ff 09 | .. | event: "Device Name" (65289) 0xc3-0xc5 (2) 0x0c0| 08 54 68 65 54 68 69 6e 67 | .TheThing | device: "TheThing" 0xc5-0xce (9) - | | | [10]{}: TypeMIDIChannelPrefix 0xce-0xd3 (5) + | | | [10]{}: MIDIChannelPrefix 0xce-0xd3 (5) | | | time{}: 0xce-0xcf (1) 0x0c0| 00 | . | delta: 0 0xce-0xcf (1) | | | tick: 0 -0x0c0| ff| .| event: "midi channel prefix" (65312) 0xcf-0xd1 (2) +0x0c0| ff| .| event: "Midi Channel Prefix" (65312) 0xcf-0xd1 (2) 0x0d0|20 | | 0x0d0| 01 0d | .. | channel: 13 0xd1-0xd3 (2) - | | | [11]{}: TypeMIDIPort 0xd3-0xd8 (5) + | | | [11]{}: MIDIPort 0xd3-0xd8 (5) | | | time{}: 0xd3-0xd4 (1) 0x0d0| 00 | . | delta: 0 0xd3-0xd4 (1) | | | tick: 0 -0x0d0| ff 21 | .! | event: "midi port" (65313) 0xd4-0xd6 (2) +0x0d0| ff 21 | .! | event: "Midi Port" (65313) 0xd4-0xd6 (2) 0x0d0| 01 70 | .p | port: 112 0xd6-0xd8 (2) | | | [12]{}: KeySignature 0xd8-0xde (6) | | | time{}: 0xd8-0xd9 (1) 0x0d0| 00 | . | delta: 0 0xd8-0xd9 (1) | | | tick: 0 -0x0d0| ff 59 | .Y | event: "key signature" (65369) 0xd9-0xdb (2) +0x0d0| ff 59 | .Y | event: "Key Signature" (65369) 0xd9-0xdb (2) 0x0d0| 02 00 01 | ... | key: "A minor" (1) 0xdb-0xde (3) | | | [13]{}: SequencerSpecific 0xde-0xe8 (10) | | | time{}: 0xde-0xdf (1) 0x0d0| 00 | . | delta: 0 0xde-0xdf (1) | | | tick: 0 -0x0d0| ff| .| event: "sequencer specific event" (65407) 0xdf-0xe1 (2) +0x0d0| ff| .| event: "Sequencer Specific Event" (65407) 0xdf-0xe1 (2) 0x0e0|7f |. | | | | info{}: 0xe1-0xe8 (7) 0x0e0| 06 00 00 3b 3a 4c 5e | ...;:L^ | bytes: "[0 0 59 58 76 94]" 0xe1-0xe8 (7) @@ -160,7 +160,7 @@ $ fq -d midi dv test.mid | | | time{}: 0xe8-0xe9 (1) 0x0e0| 00 | . | delta: 0 0xe8-0xe9 (1) | | | tick: 0 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0e0| b0 | . | channel: 0 0xe9-0xea (1) 0x0e0| 00 | . | controller: "Bank Select (MSB)" (0) 0xea-0xeb (1) 0x0e0| 05 | . | value: 5 0xeb-0xec (1) @@ -168,7 +168,7 @@ $ fq -d midi dv test.mid | | | time{}: 0xec-0xed (1) 0x0e0| 00 | . | delta: 0 0xec-0xed (1) | | | tick: 0 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0e0| b0 | . | channel: 0 0xed-0xee (1) 0x0e0| 20 | | controller: "Bank Select (LSB)" (32) 0xee-0xef (1) 0x0e0| 21| !| value: 33 0xef-0xf0 (1) @@ -176,14 +176,14 @@ $ fq -d midi dv test.mid | | | time{}: 0xf0-0xf1 (1) 0x0f0|00 |. | delta: 0 0xf0-0xf1 (1) | | | tick: 0 - | | | event: "program change" (192) + | | | event: "Program Change" (192) 0x0f0| c0 | . | channel: 0 0xf1-0xf2 (1) 0x0f0| 19 | . | program: 25 0xf2-0xf3 (1) | | | [17]{}: Controller 0xf3-0xf7 (4) | | | time{}: 0xf3-0xf4 (1) 0x0f0| 00 | . | delta: 0 0xf3-0xf4 (1) | | | tick: 0 - | | | event: "controller" (176) + | | | event: "Controller" (176) 0x0f0| b0 | . | channel: 0 0xf4-0xf5 (1) 0x0f0| 65 | e | controller: "Registered Parameter Number (MSB)" (101) 0xf5-0xf6 (1) 0x0f0| 00 | . | value: 0 0xf6-0xf7 (1) @@ -191,21 +191,21 @@ $ fq -d midi dv test.mid | | | time{}: 0xf7-0xf8 (1) 0x0f0| 00 | . | delta: 0 0xf7-0xf8 (1) | | | tick: 0 - | | | event: "polyphonic pressure" (160) + | | | event: "Polyphonic Pressure" (160) 0x0f0| a0 | . | channel: 0 0xf8-0xf9 (1) 0x0f0| 64 | d | pressure: 100 0xf9-0xfa (1) | | | [19]{}: ChannelPressure 0xfa-0xfd (3) | | | time{}: 0xfa-0xfb (1) 0x0f0| 00 | . | delta: 0 0xfa-0xfb (1) | | | tick: 0 - | | | event: "channel pressure" (208) + | | | event: "Channel Pressure" (208) 0x0f0| d0 | . | channel: 0 0xfb-0xfc (1) 0x0f0| 07 | . | pressure: 7 0xfc-0xfd (1) | | | [20]{}: NoteOn 0xfd-0x101 (4) | | | time{}: 0xfd-0xfe (1) 0x0f0| 00 | . | delta: 0 0xfd-0xfe (1) | | | tick: 0 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x0f0| 90 | . | channel: 0 0xfe-0xff (1) 0x0f0| 30| 0| note: "C3" (48) 0xff-0x100 (1) 0x100|48 |H | velocity: 72 0x100-0x101 (1) @@ -213,7 +213,7 @@ $ fq -d midi dv test.mid | | | time{}: 0x101-0x102 (1) 0x100| 00 | . | delta: 0 0x101-0x102 (1) | | | tick: 0 - | | | event: "note on" (144) + | | | event: "Note On" (144) 0x100| 92 | . | channel: 2 0x102-0x103 (1) 0x100| 31 | 1 | note: "C♯3/D♭3" (49) 0x103-0x104 (1) 0x100| 48 | H | velocity: 72 0x104-0x105 (1) @@ -221,7 +221,7 @@ $ fq -d midi dv test.mid | | | time{}: 0x105-0x106 (1) 0x100| 00 | . | delta: 0 0x105-0x106 (1) | | | tick: 0 - | | | event: "note on" (144) + | | | event: "Note On" (144) | | | channel: 2 0x106-0x106 (0) 0x100| 30 | 0 | note: "C3" (48) 0x106-0x107 (1) 0x100| 64 | d | velocity: 100 0x107-0x108 (1) @@ -229,14 +229,14 @@ $ fq -d midi dv test.mid | | | time{}: 0x108-0x10a (2) 0x100| 81 70 | .p | delta: 240 0x108-0x10a (2) | | | tick: 0 - | | | event: "pitch bend" (224) + | | | event: "Pitch Bend" (224) 0x100| e0 | . | channel: 0 0x10a-0x10b (1) 0x100| 00 08 | .. | bend: 8 0x10b-0x10d (2) | | | [24]{}: NoteOff 0x10d-0x112 (5) | | | time{}: 0x10d-0x10f (2) 0x100| 83 60 | .` | delta: 480 0x10d-0x10f (2) | | | tick: 240 - | | | event: "note off" (128) + | | | event: "Note Off" (128) 0x100| 80| .| channel: 0 0x10f-0x110 (1) 0x110|30 |0 | note: "C3" (48) 0x110-0x111 (1) 0x110| 40 | @ | velocity: 64 0x111-0x112 (1) @@ -244,7 +244,7 @@ $ fq -d midi dv test.mid | | | time{}: 0x112-0x113 (1) 0x110| 00 | . | delta: 0 0x112-0x113 (1) | | | tick: 720 -0x110| f0 | . | event: "sysex message" (240) 0x113-0x114 (1) +0x110| f0 | . | event: "Sysex Message" (240) 0x113-0x114 (1) 0x110| 05 7e 00 09 01 f7 | .~.... | bytes: "[126 0 9 1 247]" 0x114-0x11a (6) | | | manufacturer: "Non-RealTime Extensions" ("7E") | | | data: "[0 9 1]" @@ -252,7 +252,7 @@ $ fq -d midi dv test.mid | | | time{}: 0x11a-0x11b (1) 0x110| 00 | . | delta: 0 0x11a-0x11b (1) | | | tick: 720 -0x110| f0 | . | event: "sysex message" (240) 0x11b-0x11c (1) +0x110| f0 | . | event: "Sysex Message" (240) 0x11b-0x11c (1) 0x110| 03 43 12 00| .C..| bytes: "[67 18 0]" 0x11c-0x120 (4) | | | manufacturer: "Yamaha" ("43") | | | data: "[18 0]" @@ -261,14 +261,14 @@ $ fq -d midi dv test.mid | | | time{}: 0x120-0x122 (2) 0x120|81 48 |.H | delta: 200 0x120-0x122 (2) | | | tick: 720 -0x120| f7 | . | event: "sysex continuation" (33015) 0x122-0x123 (1) +0x120| f7 | . | event: "Sysex Continuation" (33015) 0x122-0x123 (1) 0x120| 06 43 12 00 43 12 00 | .C..C.. | bytes: "[67 18 0 67 18 0]" 0x123-0x12a (7) 0x120| 06 43 12 00 43 12 00 | .C..C.. | data: "[67 18 0 67 18 0]" 0x123-0x12a (7) | | | [28]{}: SysExContinuation 0x12a-0x131 (7) | | | time{}: 0x12a-0x12b (1) 0x120| 64 | d | delta: 100 0x12a-0x12b (1) | | | tick: 920 -0x120| f7 | . | event: "sysex continuation" (33015) 0x12b-0x12c (1) +0x120| f7 | . | event: "Sysex Continuation" (33015) 0x12b-0x12c (1) 0x120| 04 43 12 00| .C..| bytes: "[67 18 0 247]" 0x12c-0x131 (5) 0x130|f7 |. | 0x120| 04 43 12 00| .C..| data: "[67 18 0]" 0x12c-0x131 (5) @@ -277,12 +277,12 @@ $ fq -d midi dv test.mid | | | time{}: 0x131-0x132 (1) 0x130| 00 | . | delta: 0 0x131-0x132 (1) | | | tick: 1020 -0x130| f7 | . | event: "sysex escape" (247) 0x132-0x133 (1) +0x130| f7 | . | event: "Sysex Escape" (247) 0x132-0x133 (1) 0x130| 02 f3 01 | ... | bytes: "[243 1]" 0x133-0x136 (3) 0x130| 02 f3 01 | ... | data: "[243 1]" 0x133-0x136 (3) | | | [30]{}: EndOfTrack 0x136-0x13a (4) | | | time{}: 0x136-0x137 (1) 0x130| 00 | . | delta: 0 0x136-0x137 (1) | | | tick: 1020 -0x130| ff 2f | ./ | event: "end of track" (65327) 0x137-0x139 (2) +0x130| ff 2f | ./ | event: "End Of Track" (65327) 0x137-0x139 (2) 0x130| 00| | .| | length: 0 0x139-0x13a (1)