NeoGriever: MIDI-Dateien - Verständnis der Struktur

Beitrag lesen

... Wie, wo und warum trennst du hier ab bestimmten Zeichen? Ich verstehe hier nur "Bahnhof" :/

Danke. Endlich mal jemand, der versteht, was ich eigentlich wissen will :P

Was genau hast Du an meiner Erklärung nicht verstanden?

Hab mich jetzt mal drangesetzt und alles, was ich "verstanden" habe, farblich hervorgehoben und alles, was ich NICHT raffe, grau hinterlegt.


(1 Zeile = 30 Byte)

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.

Ja. Ich schaue da schon binär genau hin. Ich hab schon verstanden, dass die Daten da binär erfasst werden. Wenn ich jetzt rauskriege, wie diese MTrk-Parts und bereiche aufgebaut sind, krieg ich dieses Tool auch fertig und kann die Töne so auslesen, wie ich sie bräuchte.

PS: Das Tool arbeitet mit Zeigern.

Nebenbei. Ich habe mir auch eine PHP-Klasse gezogen, welche aber vom Umfang so fett ist, dass es sich nicht lohnt, diese zu "zerreißen" um die funktionsweise zu erkennen. Daher hier ein Ausschnitt aus der Parsing-Ausgabe. (Exakt der Ausschnitt, welcher auch im Bild zu sehen ist.)

0x00000000	(Bytes gekürzt) MIDI file format: 1, # of tracks: 2, Time division: 96  
  
Track 1  
0x0000000E	(Bytes gekürzt)	Track size: 11 bytes  
0x00000016	(Bytes gekürzt)	[0 ticks] Set Tempo: 140 BPM  
0x0000001D	(Bytes gekürzt)	[0 ticks] End of Track:  
  
Track 2  
0x00000021	(Bytes gekürzt)	Track size: 3918 bytes  
0x00000029	(Bytes gekürzt)	[0 ticks] Track Name: Grand piano wet (MIDI)  
0x00000043	00 B0 0A 40	[0 ticks] Controller (channel 0): Pan value [64]  
0x00000047	00 B0 07 64	[0 ticks] Controller (channel 0): Main Volume value [100]  
0x0000004B	00 E0 00 40	[0 ticks] Pitch Bend (channel 0): -97 cents  
0x0000004F	00 B0 65 00	[0 ticks] Controller (channel 0): Registered Parameter Number  
0x00000053	00 B0 64 00	[0 ticks] Controller (channel 0): Registered Parameter Number  
0x00000057	00 B0 06 0C	[0 ticks] Controller (channel 0): Data Entry  
0x0000005B	00 B0 0A 40	[0 ticks] Controller (channel 0): Pan value [64]  
0x0000005F	00 B0 07 64	[0 ticks] Controller (channel 0): Main Volume value [100]  
0x00000063	00 E0 00 40	[0 ticks] Pitch Bend (channel 0): -97 cents  
0x00000067	00 C0 00 00	[0 ticks] Program Change (channel 0): Concert Grand  
0x0000006A	00 B0 65 00	[0 ticks] Controller (channel 0): Registered Parameter Number  
0x0000006E	00 B0 64 00	[0 ticks] Controller (channel 0): Registered Parameter Number  
0x00000072	00 B0 06 0C	[0 ticks] Controller (channel 0): Data Entry (most significant  
0x00000076	00 B0 0A 40	[0 ticks] Controller (channel 0): Pan value [64]  
0x0000007A	00 B0 07 64	[0 ticks] Controller (channel 0): Main Volume value [100]  
0x0000007E	00 E0 00 40	[0 ticks] Pitch Bend (channel 0): -97 cents  
0x00000082	00 C0 00 00	[0 ticks] Program Change (channel 0): Concert Grand  
0x00000085	00 B0 65 00	[0 ticks] Controller (channel 0): Registered Parameter Number  
0x00000089	00 B0 64 00	[0 ticks] Controller (channel 0): Registered Parameter Number  
0x0000008D	00 B0 06 0C	[0 ticks] Controller (channel 0): Data Entry  
0x00000091	00 B0 0A 40	[0 ticks] Controller (channel 0): Pan value [64]  
0x00000095	00 B0 07 64	[0 ticks] Controller (channel 0): Main Volume value [100]  
0x00000099	00 E0 00 40	[0 ticks] Pitch Bend (channel 0): -97 cents  
0x0000009D	00 C0 00 00	[0 ticks] Program Change (channel 0): Concert Grand  
0x000000A0	30 90 48 04	[48 ticks] Note On (channel 0): C5 with velocity 4  
0x000000A4	2F 80 48 40	[47 ticks] Note Off (channel 0): C5 with velocity 64  
0x000000A8	01 90 54 2B	[1 ticks] Note On (channel 0): C6 with velocity 43  
0x000000AC	2F 80 54 40	[47 ticks] Note Off (channel 0): C6 with velocity 64  
0x000000B0	01 90 4B 06	[1 ticks] Note On (channel 0): D#5 with velocity 6  
0x000000B4	2F 80 4B 40	[47 ticks] Note Off (channel 0): D#5 with velocity 64  
0x000000B8	01 90 57 2D	[1 ticks] Note On (channel 0): D#6 with velocity 45  
0x000000BC	2F 80 57 40	[47 ticks] Note Off (channel 0): D#6 with velocity 64  
0x000000C0	01 90 4B 0A	[1 ticks] Note On (channel 0): D#5 with velocity 10  
0x000000C4	2F 80 4B 40	[47 ticks] Note Off (channel 0): D#5 with velocity 64  
0x000000C8	01 90 5E 3A	[1 ticks] Note On (channel 0): A#6 with velocity 58  
0x000000CC	2F 80 5E 40	[47 ticks] Note Off (channel 0): A#6 with velocity 64  
0x000000D0	01 90 4B 11	[1 ticks] Note On (channel 0): D#5 with velocity 17

Ich weiß zwar, dass das Tool das wahrscheinlich umrechnet. Aber wie kommt der auf 140 bpm z. b.?

Ich weiß. Ich bin etwas langsam von KP. Aber wenn ichs jetzt einmal gerafft habe, ohne ellenlange Seiten zu durchforsten, die mir doch keine plausible Antwort liefern, dann bin ich durch.

PS: Die Kommando-Befehle mit MSB und so sind mir schon gut bekannt. Jedoch raff ich nicht, was 00000000 als Kommando für nen Wert hätte, wie oben schon erfragt.

Also würdest du mir bitte helfen, wenigstens den Anfang der beiden MTrk zu verstehen?

Entschuldigt bitte, dass ich eure Geduld so auf die Probe stelle :/