Ich habe mir ein kleines Programm geschrieben, das eine MIDI-Datei laden können soll. Nach dem Laden werden die Daten der MIDI-Datei analysiert und ausgegeben. Dabei gibt es aber ein Problem: Die Daten, die ich auslesen lasse, sind nicht korrekt. Das heißt, irgendwo muss noch ein Fehler drinstecken. Könnt ihr mir helfen und sagen, wo der Fehler ist? Das wäre super. Danke im Voraus!
MIDI-Erklärung:
http://www.larsrichter-online.de/lmids/midformat.htm (deutsch, nicht komplett richtig)
http://253.ccarh.org/handout/smf/ (englisch, korrekt)
Mein Programm (mit Projektdateien und Beispiel-MIDI-Datei) habe ich angehängt.
Bitte guckt euch mal die Prozedur OpenMidi an. Da muss der Fehler drinstecken. Die Variable DeltaValue hat da immer den Wert 0, was nicht sein dürfte.
Im Moment wird der Wert so ausgelesen:
Delphi-Quellcode:
MidiFile.ReadBuffer(TempByteValue, SizeOf(TempByteValue));
Dec(ChunkSize);
DeltaValue := TempByteValue;
if TempByteValue
and $80 = $80
then
begin
DeltaValue := DeltaValue
and $7F;
repeat
MidiFile.ReadBuffer(TempByteValue, SizeOf(TempByteValue));
Dec(ChunkSize);
DeltaValue := DeltaValue
shl 7 + (TempByteValue
and $7F);
until (ChunkSize = 0)
or (TempByteValue
and $80 = 0);
end;
Ich glaube aber, dass das falsch ist. Eigentlich sollte bei jedem MIDI-Kommando ein eigener DeltaValue stehen. Aber ich weiß nicht, wo das genau hin müsste.