AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem beim MIDI-Datei-Auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim MIDI-Datei-Auslesen

Ein Thema von DelNoo · begonnen am 2. Mär 2009 · letzter Beitrag vom 3. Mär 2009
Antwort Antwort
DelNoo

Registriert seit: 22. Jan 2009
7 Beiträge
 
#1

Problem beim MIDI-Datei-Auslesen

  Alt 2. Mär 2009, 22:26
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.
Angehängte Dateien
Dateityp: zip pianoskills_786.zip (221,0 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Problem beim MIDI-Datei-Auslesen

  Alt 3. Mär 2009, 18:40
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:
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');
Danach kannst du ganz bequem auf jedes Zeichen (bzw. Byte) zugreifen.

[edit=mkinzler]Cache refresh Mfg, mkinzler[/edit]
[edit=Matze]BBCode aktiviert. MfG, Matze[/edit]
Andreas
  Mit Zitat antworten Zitat
DelNoo

Registriert seit: 22. Jan 2009
7 Beiträge
 
#3

Re: Problem beim MIDI-Datei-Auslesen

  Alt 3. Mär 2009, 20:28
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 ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz