Thema: Virtual Piano

Einzelnen Beitrag anzeigen

alfold

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

AW: Virtual Piano

  Alt 20. Mai 2011, 15:35
Zitat:
Eine Note.. bsp. 50
Erweiterst du diese dann bekommst du einen Eintrag von "50, 1050"
1050 steht für Fortgesetzte Note(rede jetzt nur vom Grid) in dem Fall hättest du dann 2x48 Ticks also ein halbe note 2/4.
Wobei 50 die StartNote und mit 1000 addiert die Folgenden sind.
"50, 1050, 1050, 1050" wäre dann eine ganze.

Wenn du dich nun im 1/16 Grid befindest und dort eine ganze Note zeichnest sieht das ganze so aus.
"91,1091,1091,1091,1091,1091,1091,1091,1091,10 91,1 091,1091,1091,1091,1091,1091"

So jetzt schalte mal zurück nach 1/8 Note..
Was denkst du wie es dann aussieht
Dann halbiert ich das ganze schaltest du nun nach 1/4 dann wird alles das abgeschnitten was
im 1/4 Grid nicht mehr Anzeigbar ist so wie die 1/16 Note.

Es ist einfach mit meiner Grid auflösung nicht möglich in einem 1/4 grid 1/16 noten anzeigen zu lassen.
Ok hiehr mal der richtige Ansatz
'...Fall hättest du dann 2x48 Ticks also ein halbe note 2/4.'
eine 32tel hat 3ticks
eine 16tel hat 6ticks
eine 8tel hat 12ticks
Eine 4tel hätte 24 ticks
eine halbe hätte 48 ticks
eine ganze hat 96 ticks

eine Punktierte 4tel hätte demzufolge auch 48ticks nur so am rande

So speichern tutst Du nun
50 12 für ne 8tel oder
50 24 für ne 4tel oder
50 48 für ne halbe oder
50 96 für ne ganze
so sollten die dan in deinem Array drin stehen.
Das sind die tatsächliche gehörte länge einer Note!
Grid Ausgabe:
1/4 diesen wert musst Du ja auch irgendwo stehen haben!
nun kommt die Berechnung und dies hat nix mit VCL oder nonvcl zu tun

Deine graphiche länge ist 12, (die höhe lass ich mal weg)
Delphi-Quellcode:
if 1/4 and (notenticks >=24) then zeichnen
  notenticks 24 zeichne 12
  notenticks 48 zeichne 2x12
  notenticks 96 zeichne 4x12

if 1/8 and (notenticks >= 12 then zeichnen
   notenticks 12 zeichne 12
   notenticks 24 zeichne 2x12
   notenticks 48 zeichne 4x12

if 1/16 and (notenticks >=6) then zeichnen
   notenticks 6 zeichne 12
   notenticks 12 zeichne 2x12
   notenticks 24 zeichne 4x12
   notenticks 48 zeichne 8x12
usw.
Sieht im ersten Moment natürlich blöd aus, erklärt aber wie die Umsetzung vom prinzip geht!
Und jetzt sage mir das geht nicht!
Denn dies hat weder was mit vcl oder nonvcl zu tun
Das auslesen(beim editieren) was Du also irgend wo mit der Mouse gemacht hast,
must Du ja auch irgenwo herbekommen. Da steht auch irgenwo der Wert 1/4 oder 1/16
dann Zeichnest Du (oder wie du es bei nonvcl nennst)und diesen Wert rechnest Du zurück und speicherst es so ab wie oben beschrieben!

Das brauchst Du also nicht speichern
"91,1091,1091,1091,1091,1091,1091,1091,1091,10 91,1 091,1091,1091,1091,1091,1091"
bei einer Auflösung von 1/16
sondern so wie es sein sollte
91 96, entspricht eine ganze Note.

Du siehst also das dein eigener Ansatzt des speichern, falsch ist.
Sorry Bitte, wenn ich diesen Ansatz von Dir kritisiere.

Kannst mich jetzt auch Steinigen oder mir verbieten auf dieses Thema noch zu Antworten,
würde ich sogar verstehen.

Gruss alfold

Geändert von alfold (20. Mai 2011 um 16:15 Uhr)
  Mit Zitat antworten Zitat