![]() |
Problem beim MIDI-Datei-Auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
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: ![]() ![]() 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:
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.
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; |
Re: Problem beim MIDI-Datei-Auslesen
Dein byteweises Einlesen ist ziemlich umständlich aund langsam.
Ich würde die komplette MIDI-Datei als String einlesen (auf einen Rutsch) und dann auswerten.
Delphi-Quellcode:
Danach kannst du ganz bequem auf jedes Zeichen (bzw. Byte) zugreifen.
function FileToString(const FileName: AnsiString): AnsiString;
var FS: TFileStream; Len: Integer; begin FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try Len := FS.Size; SetLength(Result, Len); if Len > 0 then FS.ReadBuffer(Result[1], Len); finally FS.Free; end; end; MIDIdaten := FileToString('Highway to Hell.mid'); [edit=mkinzler]Cache refresh Mfg, mkinzler[/edit] [edit=Matze]BBCode aktiviert. MfG, Matze[/edit] |
Re: Problem beim MIDI-Datei-Auslesen
Danke! Dann muss ich ja auch ziemlich viel im restlichen Code ändern, z.B. das "ReadBuffer" brauche ich ja dann nicht mehr. Mal gucken, ob ich das hinkriege.
Aber das Problem, dass die Daten anscheinend nicht richtig ausgelesen werden, besteht ja immer noch. Lese ich vielleicht bestimmte Bytes in falsche Variablen ein? Wo muss ich die DeltaValues genau auslesen? Ich hoffe, ihr könnt helfen ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz