(Gast)
n/a Beiträge
|
AW: Virtual Piano
20. Mai 2011, 17:15
2 Fragen dazu
An welcher Stelle berücksichtigst Du die Auflösung? (1/4 - 1/32)
Was passiert wenn man die Auflösung ändert? Wird die Datei neu eingelesene oder wie wird es bei Dir gemacht?
Das währe erstmal alles dazu.
Hab zwr noch nicht alles kappiert, ist klar, aber ich denke damit kommt man zurecht, um es nach meinem Vorschlag umzusetzten.(versuch)
Gruss alfold
Kleinste Note..
SmallNoteData[SmallNDSelected].Value);
Delphi-Quellcode:
// Kleinste Noten
SmallNoteData[0].Name := '1/4 Note';
SmallNoteData[0].Value := 1;
SmallNoteData[0].Nenner := 2;
SmallNoteData[0].Ticks := 48;
SmallNoteData[1].Name := '1/8 Note';
SmallNoteData[1].Value := 2;
SmallNoteData[1].Nenner := 3;
SmallNoteData[1].Ticks := 24;
SmallNoteData[2].Name := '1/16 Note';
SmallNoteData[2].Value := 4;
SmallNoteData[2].Nenner := 4;
SmallNoteData[2].Ticks := 12;
SmallNoteData[3].Name := '1/32 Note';
SmallNoteData[3].Value := 8;
SmallNoteData[3].Nenner := 5;
SmallNoteData[3].Ticks := 6;
Wenn die Auflösung geändert wird passiert folgendes.. bzw wird diese Funktion aufgerufen.
MidiTracker.SetNewNoteLength(SmallNoteData[SmallNDSelected].Value);
Delphi-Quellcode:
procedure TMidiTracker.SetNewNoteLength(NewLenght: Integer);
var
TmpGrid: array of Integer;
Note: Integer;
IntA: integer;
IntB: Integer;
IntC: Integer;
NewNote: Integer;
begin
FindEndOfSong;
if SongLength > 0 then
begin
SetLength(TmpGrid, MaxNotes);
MidiTracker.ChangeVelocity;
NewNote:= -1;
//if NewLenght div 2 = 0 then
// exit;
// Altes Grid Speichern
if not bOldGrid then
begin
for IntA := 0 to 15 do
for IntB := 0 to High(TmpGrid) do
OldGrid[IntA, IntB] := Grid[IntA, IntB];
bOldGrid := True;
end;
if bOldGrid then
begin
// Altes Grid füllen zum erneuten Parsen
for IntA := 0 to 15 do
for IntB := 0 to High(TmpGrid) do
begin
Grid[IntA, IntB] := OldGrid[IntA, IntB];
TmpGrid[IntB] := -1;
end;
end;
for IntA := 0 to 15 do
begin
for IntB := 0 to SongLength do
begin
Note := Grid[IntA, IntB];
if Note < 1000 then
begin
for IntC := 0 to NewLenght - 1 do
begin
if NewNote < High(TmpGrid) then
begin
inc(NewNote);
TmpGrid[NewNote] := Note;
if Note < 0 then
Note := -1
else
Note := 1000 + Note;
end;
end;
end else
begin
if Note > 1000 then
for IntC := 0 to NewLenght - 1 do
begin
if NewNote < High(TmpGrid) then
begin
inc(NewNote);
TmpGrid[NewNote] := Note;
end;
end;
end;
end;
for IntB := 0 to High(TmpGrid) do
Grid[IntA, IntB] := TmpGrid[IntB];
// Blanke Noten einfügen
for IntB := 0 to High(TmpGrid) do
TmpGrid[IntB] := -1;
NewNote:= -1;
end;
end;
end;
gruss
Geändert von EWeiss (20. Mai 2011 um 17:18 Uhr)
|
|
Zitat
|