Thema: Virtual Piano

Einzelnen Beitrag anzeigen

alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#297

AW: Virtual Piano

  Alt 2. Jul 2011, 21:29
Und kein Peng

Siehe oben angehängtes Foto.
Dann mach mal //HalbTon: array[0..100] of Bool; und dokumentiere mal halbton in Dragrid und PrintSidbar aus.
Soll ja nur zum Test sein, ob Du dann etwa in zeile 290 eine Fehlermeldung bekommst.

Obendrein sollst Du ja nicht von Deinem Rechner ausgehen.
Bei mir funct auch immer alles - aber wehe ich komm auf ein anderen Rechner. Sei es mit dem fertigen Prog oder mit den Quellcode, der mal überarbeitet werden soll

Egal, solange ich die original Reienfolge einhalte funct alles, aber wehe -siehe oben- . Dies gibt mir zu denken!!!!

Anbei:
Ich habe schon einiges vereinfachen können! Du hast manchmal unötiges gemacht.
Ich muss sowie so neue Proceduren schreiben. Die alten mach ich {} so
1. Grid[] wird dynamisch
2. werden die Daten so im Grid abgelegt wie die original MIDIFile
$0;$90;$76;$42;$97;$80,$00 als Beispiel
Somit kann man auch Akkorde in einem Track spielen, lautstärke für jede Note festlegen usw

Problem bei der ganzen Sache ist, das ich fast nichts nutzen kann von Dir, bis auf die Graphicroutinen und die muss ich auch anpassen

Wahrscheinlich ist es besser den MIDITRACKER gleich neu zu schreiben. Denn zur Zeit Doktore ich an zu vielen Stellen im jetztigen MidiTracker und dann kommt sowas raus siehe oben und such den Fehler. Der hat mir 3 Tage gekostet.
Und bleibt ein RÄÄÄÄTsel.

@NamenLozer:
Delphi-Quellcode:
 
{----------------in uGlobal.pas--------------}
type
  TSplitStrArray = array of string;
....
....
function Split(const Source, Delimiter: string): TSplitStrArray;
...
...

function Split(const Source, Delimiter: string): TSplitStrArray;
var
  spCount: integer;
  spPos: integer;
  spLength: integer;
  sTemp: string;
  aSplit: TSplitStrArray;

begin
  sTemp := Source;
  spCount := 0;
  spLength := Length(Delimiter) - 1;
  repeat
    spPos := Pos(Delimiter, sTemp);
    if spPos = 0 then
      break
    else
    begin
      Inc(spCount);
      SetLength(aSplit, spCount);
      aSplit[spCount - 1] := Copy(sTemp, 1, spPos - 1);
      Delete(sTemp, 1, spPos + spLength);
    end;

  until False;
  if Length(sTemp) > 0 then
  begin
    Inc(spCount);
    SetLength(aSplit, spCount);
    aSplit[spCount - 1] := sTemp;
  end;

  Result := aSplit;

end;

{--------in uMidiTraker------------------------}
private
 DieNoten: TSplitStrArray;
...
...

procedure TMidiTracker.SplitNotes;
var
  IntA: integer;
  IntB: integer;
  IntC: integer;
  //mynoten: TSplitStrArray; <--war als test von mir

begin

 DieNoten := Split('C,C#,D,D#,E,F,F#,G,G#,A,A#,B', ',');
  for IntA := 0 to 11 do
  begin
    for IntB := 0 to 11 do
    begin
      IntC := IntA * 12 + IntB;
      if IntC < 128 then
        NotenNamen[127 - IntC] := IntToStr(IntA) + DieNoten[IntB];
    end;
  end;

end;
Problem ist solange alles in der Reihenfolge wie er es hat, funct es ja, aber wie oben beschrieben, sobald etwas nicht mehr in der Reihenfolge ist

Original:
HalbTon: array[0..100] of Bool;
DieNoten: TSplitStrArray;
NotenNamen: array[0..127] of string;

geändert: peng
DieNoten: TSplitStrArray;
HalbTon: array[0..100] of Bool;
NotenNamen: array[0..127] of string;

Gruss alfold

Geändert von alfold ( 2. Jul 2011 um 21:31 Uhr)
  Mit Zitat antworten Zitat