Habe mich mal im Internet auf diversen Seiten schlau gemacht über die zusammensetzung der Midi Header
Das ist dabei herausgekommen.
Wenn sich jemand auskennt ..
Sind die Daten so korrekt?
Delphi-Quellcode:
procedure ExpMidiFile;
var
Bytes: array[0..10000] of byte;
begin
// MIDI File Header Chunk (14 bytes)
// MTHD
Bytes[1] := ord('M');
Bytes[2] := ord('T');
Bytes[3] := ord('h');
Bytes[4] := ord('d');
// Headerlänge 6 bytes
Bytes[5] := 0;
Bytes[6] := 0;
Bytes[7] := 0;
Bytes[8] := 6;
// 6 byte Header
// 0 - Einzelne Spur
// 1 - Mehrere Spuren, Syncron
// 2 - Mehrere Spuren, ASyncron
Bytes[9] := 0;
Bytes[10] := 1;
Bytes[11] := 0;
Bytes[12] := 9; // Spur Nummer
Bytes[13] := 0;
Bytes[14] := 48; // Anzahl der Delta-Zeit sekunde pro Viertelnote
// Spur 1
// MTRK
Bytes[15] := ord('M');
Bytes[16] := ord('T');
Bytes[17] := ord('r');
Bytes[18] := ord('k');
// Anzahl der Bytes in der Spur
Bytes[19] := 0;
Bytes[20] := 0;
Bytes[21] := 0;
Bytes[22] := 19;
// Geschwindigkeit
Bytes[23] := 0; // delta Zeit
Bytes[24] := 255; // FF (Meta Befehl)
Bytes[25] := 81; // Tempo Befehl
Bytes[26] := 3; // 3 bytes für Tempo Beschreibung
// Zeit Signatur
Bytes[30] := 0; // delta Zeit
Bytes[31] := 255; // FF (Meta Befehl)
Bytes[32] := 88; // Zeit Signatur Befehl
Bytes[33] := 4; // 4 bytes
Bytes[34] := 4; // Zähler
Bytes[35] := 2; // Nenner (2 = 1/4, 3 = 1/8, 4 = 1/16, etc.)
Bytes[36] := 24; // ?
Bytes[37] := 8; // 32 Note in einer 4 Note;
// Spur Ende
Bytes[38] := 0; // delta Zeit
Bytes[39] := 255; // Spurende Befehl
Bytes[40] := 47;
Bytes[41] := 0;
Bin erst am Anfang und ist nicht so leicht umzusetzen.
Für alle bytes habe ich keine Infos gefunden.
Bringt mir ja nichts wenn mein Header falsch ist und die MIDI nachher nicht als Midi erkannt wird.
gruss