@midi_track2ascii(tab)
This function read a list of timestamped midi messages, as returned by @midi_read, and produces a tab where the seven previous commands are given in a human readable way, with the channel is uncoupled from the command name. This function can be used for debugging purposes.
For example, suppose that
$t := @midi_read("bolero.mid")
returns the tab
TAB[ [0.0, TAB[255, 3, 6, 66, 111, 108, 101, 114, 111]],
[0.0, TAB[255, 81, 3, 11, 188, 206]],
[0.0, TAB[255, 88, 4, 4, 2, 24, 8]],
[1.45032, TAB[240, 65, 16, 66, 18, 64, 0, 127, 0, 65, 247]],
[0.717147, TAB[176, 91, 127]],
[0.020032, TAB[177, 91, 127]],
[0.0400641, TAB[178, 91, 127]],
[0.0400641, TAB[179, 91, 127]],
[0.0400641, TAB[180, 91, 127]],
[0.00400641, TAB[201, 48]],
[0.0, TAB[153, 86, 64]],
[0.00400641, TAB[137, 86, 64]],
[0.0, TAB[200, 32]],
[0.0, TAB[184, 10, 65]],
[0.0, TAB[152, 36, 52]],
[0.0320512, TAB[181, 91, 127]],
[0.00801281, TAB[193, 60]],
[0.0, TAB[145, 67, 98]],
[0.0320512, TAB[182, 91, 127]],
[0.0400641, TAB[183, 91, 127]],
[0.0360577, TAB[129, 67, 98]],
[0.00400641, TAB[184, 91, 127]],
[0.0400641, TAB[185, 91, 127]],
[0.0400641, TAB[186, 91, 127]],
[0.0400641, TAB[187, 91, 127]],
[0.0400641, TAB[188, 91, 127]],
[0.0400641, TAB[189, 91, 127]],
[0.0120192, TAB[145, 67, 98]],
[0.0120192, TAB[153, 86, 31]],
[0.0, TAB[190, 91, 127]],
[0.0160256, TAB[191, 91, 127]],
[0.0520833, TAB[129, 67, 98]],
[0.0160256, TAB[137, 86, 31]],
[0.0360577, TAB[145, 67, 98]],
[0.0120192, TAB[153, 86, 31]],
[0.0240384, TAB[136, 36, 52]],
[0.020032, TAB[129, 67, 98]],
[0.0160256, TAB[137, 86, 31]],
[0.0360577, TAB[145, 67, 98]],
[0.0280448, TAB[153, 86, 31]],
[0.0440705, TAB[129, 67, 98]]
]
Then
@midi_tarck2ascii($t)
returns
TAB[ TAB[<<undef>>],
TAB[<<undef>>],
TAB[<<undef>>],
TAB[<<undef>>],
TAB["Controller", 0, 91, 127],
TAB["Controller", 1, 91, 127],
TAB["Controller", 2, 91, 127],
TAB["Controller", 3, 91, 127],
TAB["Controller", 4, 91, 127],
TAB["PatchChange", 9, 48],
TAB["NoteOn", 9, "D6", 64],
TAB["NoteOff", 9, "D6"],
TAB["PatchChange", 8, 32],
TAB["Controller", 8, 10, 65],
TAB["NoteOn", 8, "C2", 52],
TAB["Controller", 5, 91, 127],
TAB["PatchChange", 1, 60],
TAB["NoteOn", 1, "G4", 98],
TAB["Controller", 6, 91, 127],
TAB["Controller", 7, 91, 127],
TAB["NoteOff", 1, "G4"],
TAB["Controller", 8, 91, 127],
TAB["Controller", 9, 91, 127],
TAB["Controller", 10, 91, 127],
TAB["Controller", 11, 91, 127],
TAB["Controller", 12, 91, 127],
TAB["Controller", 13, 91, 127],
TAB["NoteOn", 1, "G4", 98],
TAB["NoteOn", 9, "D6", 31],
TAB["Controller", 14, 91, 127],
TAB["Controller", 15, 91, 127],
TAB["NoteOff", 1, "G4"],
TAB["NoteOff", 9, "D6"],
TAB["NoteOn", 1, "G4", 98],
TAB["NoteOn", 9, "D6", 31],
TAB["NoteOff", 8, "C2"],
TAB["NoteOff", 1, "G4"],
TAB["NoteOff", 9, "D6"],
TAB["NoteOn", 1, "G4", 98],
TAB["NoteOn", 9, "D6", 31],
TAB["NoteOff", 1, "G4"]
]
The TAB[<<undef>>]
is a tab with ony one element,
<<undef>>
. This corresponds to midi header associated
with the file and the track. The seven channel related commands (see
[@midiread]) are described with a tab whose first element is the command
name (as a string), the second element is the channel number, etc.
Cf. the description of teh parameters of a command at @midi_read.
The @midi_track2ascii is mainly used for printing partial information in a human readable format.
See also
Handling Midi
@hz2midi
@hz2midicent
@hz2symb
@midi_getChannel
@midi_getCommandByte
@midi_getCommand
@midi_getMetaType
@midi_isAftertouch
@midi_isController
@midi_isEndOfTrack
@midi_isMeta
@midi_isNoteOff
@midi_isNoteOn
@midi_isNote
@midi_isPatchChange
@midi_isPitchbend
@midi_isPressure
@midi_isTempo
@midi_read
@midi_track2ascii
@midi2hz
@midicent2hz
@symb2midicent