... 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 :/