midismf

Unrecognized status byte in Midi file


I've been working on Midi file for some time and I stuck on some kind of status byte of thing. According to the standard Midi file format there is no such a things. So, Can someone tell what is this 3 bytes information "00 a040". I know that "00" is the byte stands for delta time and 0xa0 should be status byte, If only I understood it correctly. Last 3 bytes located at line 18 is the only part I don't understand so far. After those 3 bytes, then comes the text meta event bytes lead by "00 ff01".

Midi File Line 18th to 19th:

ff 51 03 09 cc 90 00 c0 00 00 b0 07 64 00 0a 40  
00 ff 01 20 62 64 63 61 34 32 36 64 31 30 34 61

Solution

  • The SMF specification says:

    Running status is used: status bytes of MIDI channel messages may be omitted if the preceding event is a MIDI channel message with the same status.

    So these bytes can be decoded as follows:

    ff 51 03 09 cc 90: meta event: set tempo, 9CC90h = 642192 µs per quarter note
    00: delta time
    c0 00: set program 0 (piano) on channel 0
    00: delta time
    b0 07 64: set controller 7 (volumn) to value 100
    00: delta time
      0a 40: running status (repeat B0h); set controller 10 (expression) to value 64
    00: delta time
    ff 01 20 ...: meta event: text: "bdca426d104a..."