Hi there,
Sehr schön zu sehen, nach dem Auslesen des ersten MTrk und der dazugehörigen Länge (Erste Zeile die letzten 2 farbigen Bereiche) hörts mit meinem Wissen auf. Ich hab 0 Plan, wie ich die Kommandos da jetzt zuordnen soll. Besonders, weils mit dem Binärwert 00000000 anfängt, was ich
aber in KEINER dokumentation über Midi iwie nachvollziehen kann.
Dann bist Du meinem Link nicht gefolgt.
Der Anfang eines Midi-Events (im File, bei einem Midieingabegerät fällt das natürlich weg) ist immer der zeitliche Abstand, gemessen in Ticks, zum vorhergehenden Ereignis. In dem Fall also 0. Das hättes Du auch sehen können, daß in dem PHP-Output die Null vorne zu 30 wird, sozusagen 48 Ticks später (bei File-Offset A0)
0x0000000E (Bytes gekürzt) Track size: 11 bytes
Das hab ich ja schon erklärt (Bytes gekürzt steht da für 00 00 00 0B => 11 dez.)
0x00000016 (Bytes gekürzt) [0 ticks] Set Tempo: 140 BPM
Bytes gekürzt steht da für:
00 FF 51 03 06 8A 1B
00 = Tick 0
FF = Midi Meta-Event
51 03 = Set Tempo-Event (auf den 3 x 1 Byte folgt, nämlich '06 8A 1B', was Dezimal 428571 entspricht. Lt. Midispezifikation musst Du 60 Millionen Microsekunden durch diese Zahl dividieren, um die BPM zu erhalten und, voila, 60000000/428571 sind 140,00014 BPM)
0x0000001D (Bytes gekürzt) [0 ticks] End of Track:
00 = wieder Tick 0
FF = wieder Midi Meta-Event
2F = End Of Track - Event (was ja logisch ist, weil der Track eben aus ist;)
00 ? die Null da versteh ich auch nicht, kann Dir aber egal sein, weil Du beim Parsen ohnehin nur auf das Ende des Tracks und auf den Beginn des nächsten Tracks schauen musst.
Den Rest musst Du selbst (selfhtml!) herausfinden, Du findest das alles in dem von mir jetzt schon zum vierten Mal geposteten Link...