AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Virtual Piano

Virtual Piano

Ein Thema von EWeiss · begonnen am 8. Mär 2011 · letzter Beitrag vom 13. Apr 2019
Antwort Antwort
Seite 25 von 35   « Erste     15232425 2627     Letzte » 
EWeiss
Projekt entfernt..

Geändert von EWeiss (24. Jul 2019 um 05:46 Uhr)
 
EWeiss
 
#241
  Alt 19. Mai 2011, 18:36
Alle Noten egal welcher Art werden immer 12x12 gezeichnet und zwar so groß wie die Quadrate im Grid.
Wenn du eine Note in der länge änderst wird immer mit 12 hochgezählt.

Ich habe es jetzt anderes gemacht.
Ich denke es macht keinen Sinn wenn ich bei eingestellter 1/16 Note anfange zu zeichnen anschließend noch auf eine andere wechseln zu wollen.
Daher habe ich ein Flag eingebaut welches das Ändern des Grid\Note unterbindet.
Man kann aber weiterhin auf 3/4 4/4 usw.. schalten.

Man kann jederzeit die Note nachträglich noch ändern wenn man vorher abspeichert.
Die Datei neueinläd und dann ohne vorher zu zeichen auf 1/8 schaltet.
Wird dann neu gezeichnet bleibt die eingestellte Note auf 1/8.

Denke das ist eine lösung.
Werde dir demnächst mal den Quelltext zuschicken.
Vorrausgesetzt du hast D2009 UP..

gruss

Geändert von EWeiss (19. Mai 2011 um 18:38 Uhr)
  Mit Zitat antworten Zitat
Namenloser

 
FreePascal / Lazarus
 
#242
  Alt 19. Mai 2011, 19:54
Ich kann das Programm ja leider weiterhin nicht starten, aber auf dem Screenshot ist mir aufgefallen, dass alles geskinnt
ist bis auf die Scrollbars des Grids. Wirst du die eigentlich noch durch eigene ersetzen?
  Mit Zitat antworten Zitat
alfold

 
Delphi 7 Enterprise
 
#243
  Alt 19. Mai 2011, 19:59
ok ebend 12x12, wo liegt aber das Problem?
1/4 ist 12pixel eine 4tel Note, 4 senkrechte striche pro Takt
1/8 ist 24pixel eine 4tel Note, 8 senkrechte striche pro Takt
1/16 ist 48pixel eine 4tel Note usw
1/32 ist 96pixel eine 4tel Note usw

Zweite darstellung: halbe Note
1/4 ist 24pixel eine halbe Note, 4 senkrechte striche pro Takt
1/8 ist 48pixel eine halbe Note, 8 senkrechte striche pro Takt
1/16 ist 96pixel eine halbe Note, usw
1/32 ist 192pixel eine halbe Note, usw

dritte Darstellung: ganze Note
1/4 ist 48pixel eine ganze Note, 4 senkrechte striche pro Takt
1/8 ist 96pixel eine ganze Note, 8 senkrechte striche pro Takt
1/16 ist 192pixel eine ganze Note, usw
1/32 ist 384pixel eine ganze Note, usw

und nun das ganze wieder zurückrechnen. von 1/32 zu 1/4. Dies ist nur die graphische Darstellung. Was Du intern machst, um daraus ne Note zu hören ist wieder was anderes.
Selbst wenn Du daraus die Note berechnest, bleibt es immer die dementsprechende graphische Note. Du musst also nicht mal was zwischenspeichern um das neu zu berechnen beim Zeichnen des Grids. Denn irgendwo musst Du ja die Daten sprich Noten haben!?

Natürlich müssen die Taktstriche und zwichenstriche auch dazu berechnet werden, klar. Hast Du ja schon
Ist aber alles x2 oder durch 2. Oder rechne ich da falsch!?

Will ja nicht unken, bin ja selber kein Profi, nonvcl schon gar nicht, aber
Zitat:
Man kann jederzeit die Note nachträglich noch ändern wenn man vorher abspeichert.
Die Datei neueinläd und dann ohne vorher zu zeichen auf 1/8 schaltet.
dies ist keine Profilösung
Leider habe ich nur D7 Enterprise und XP
Ob Dein Source darauf läuft? Würde gern das mit der Graphic für Dich machen. Weil so wie es ist ist es halt nicht gut
Zumal ich noch ein paar wichtige futures habe, was Du noch machen müstest!

Gruss
  Mit Zitat antworten Zitat
EWeiss
 
#244
  Alt 19. Mai 2011, 20:41
Ich kann das Programm ja leider weiterhin nicht starten, aber auf dem Screenshot ist mir aufgefallen, dass alles geskinnt
ist bis auf die Scrollbars des Grids. Wirst du die eigentlich noch durch eigene ersetzen?
Das ist schade.

Eigentlich schon..
Aber das ist nicht so einfach muss mir da noch was einfallen lassen.

gruss
  Mit Zitat antworten Zitat
EWeiss
 
#245
  Alt 19. Mai 2011, 21:06
ok ebend 12x12, wo liegt aber das Problem?
Erst mal Danke für dein Interesse.

Das Problem liegt tiefer begraben man kann das so pauschal nicht auslegen.
Hast du mal die *.mtf Datei analysiert?

Wenn du eine einfache Note zeichnest ist das alles kein problem wenn du aber zwei in folge addierst rechnet sich das ganze so..

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,1091,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.

Zitat:
Ob Dein Source darauf läuft? Würde gern das mit der Graphic für Dich machen.
Zumal ich noch ein paar wichtige futures habe, was Du noch machen müstest!
Nein definitiv nicht denn der ist auf Unicode ausgelegt.

Zitat:
Weil so wie es ist ist es halt nicht gut
Gebe ich dir vollkommen Recht!
Finde aber im moment nicht die Lösung für das Problem.

gruss

Geändert von EWeiss (19. Mai 2011 um 21:10 Uhr)
  Mit Zitat antworten Zitat
alfold

 
Delphi 7 Enterprise
 
#246
  Alt 19. Mai 2011, 21:43
Zitat:
Das Problem liegt tiefer begraben man kann das so pauschal nicht auslegen.
Hast du mal die *.mtf Datei analysiert?
Jo hab ich, mit 'ALLeMeineENTCHEN' erkenne zwar die Noten, kann aber mit anderen Werten nix anfangen.
Und ich vermute genau Da, liegt der Hase im Pfeffer.
Du trennst die Daten nicht von deiner visuallisierung, sprich Grid. Was Du wie wo Speicherst, berechnest, passiert in deinem Programm.
Wie sieht es aus ohne Grid, einfach nur Play und schon wirst du feststellen, egal wie Du intern es berechnest oder speicherst, eigenes Format, interesiert niemand.
Die Anzeige muss richtig funcen, ohne die, wird es ne Qual.

Was du Anzeigen willst musst du halt so umsetzten wie ich es oben simpel beschrieben habe. Da kommst Du nicht drumrum.

Du wirst zwar für Dich glücklich mit Deinem Programm, aber andere greifen dann doch lieber auf andere FreeSoftware zurück und dies währe schade finde ich.
Gerade weil diese Prog nicht überladen ist.
Aber, es ist wichtig das die Anzeige so funktioniert, wie es nun mal sein muss.

Ob man nun unbedingt Akorde in einem Track haben muss, währe schön, ist aber nicht wichtig!
Die Anzeige schon!

EDIT:
Zitat:
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.
ebend nicht! Hab ich Dir in #240 mal vorgezeigt.
Gruss alfold

Geändert von alfold (19. Mai 2011 um 21:55 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#247
  Alt 19. Mai 2011, 22:01
Zitat:
Jo hab ich, mit 'ALLeMeineENTCHEN' erkenne zwar die Noten, kann aber mit anderen Werten nix anfangen.
Habe ich dir doch oben ausführlich beschrieben

Zitat:
Und ich vermute genau Da, liegt der Hase im Pfeffer.
Du trennst die Daten nicht von deiner visuallisierung, sprich Grid. Was Du wie wo Speicherst, berechnest, passiert in deinem Programm.
Wie soll ich die Daten vom Grid trennen?
Also das ist beim besten willen nicht möglich.
Wie willst du sonst die Arrays mit Daten füttern wenn du quasi nichts hast?

Grid: array[0..15, 0..MAXNOTES] of integer;
0..15 die Spuren
0..MAXNOTES die Noten

Wie also soll ich ohne das Grid das Array füllen?
Wie soll ich ohne Grid die Noten Visualisieren ?
Wie willst du ohne Grid festlegen wann und welche Note gespielt wird?

Zitat:
ebend nicht! Hab ich Dir in #240 mal vorgezeigt.
Muss dir nochmal sagen ich habe pro Note einen bereich zum zeichnen von 12x12 pixel
Nichts drunter und nichts drüber.
Befindet sich die Note in einem bereich der nicht glatt durch 12 Teilbar
ist wird sie gelöscht und nicht angezeigt.
Habe dir in einem früheren Beitrag schon mal gesagt das ich 7.5 nicht durch 12 Teilen kann.


gruss

Geändert von EWeiss (19. Mai 2011 um 22:05 Uhr)
  Mit Zitat antworten Zitat
alfold

 
Delphi 7 Enterprise
 
#248
  Alt 19. Mai 2011, 23:34
Zitat:
Habe ich dir doch oben ausführlich beschrieben
hab ich erst beim xten mal lesen verstanden
Wenn ich es richtig verstanden habe, speicherst du die gezeichnete Notenlänge in Deiner Datei ab?

Hast Du dir mal diesen LINK wirklich durchgelesen!

Zitat:
Wie soll ich die Daten vom Grid trennen?
Also das ist beim besten willen nicht möglich.
Wie willst du sonst die Arrays mit Daten füttern wenn du quasi nichts hast?
....
Wie also soll ich ohne das Grid das Array füllen?
Wie soll ich ohne Grid die Noten Visualisieren ?
Wie willst du ohne Grid festlegen wann und welche Note gespielt wird?
OK fangen wir hinten an!
Du liest eine Mid ein!
Was ist jetzt das Problem, die Noten kannst du in ein normales Array laden, auch ohne Grid.
Takt und BPM liegen auch vor.
Aus diesen Daten und noch andere, errechnet sich was eine 4tel note ist, halbe oder 16. als reiner Zahlenwert!
Würdest Du nun ne visualisierug mit Notenlienen machen ist es auch egal ob Du 40pixel für eine Note nimmst oder nur 10pixel. Enscheident ist jetzt, welche Note wo gezeichnet wird!

Ok zum Grid!
Wenn du beim einlesen von Middateien nun die reinen Notenwerte hast (die liegen in ein Array) kannst Du nun die Anzeige machen wie du willst! weil Du das Array nicht änderst sondern nur die Anzeige!

Ok editieren:
auch hier gibst Du Takt und BPM vor, Zeichnest die Note, egal in welcher Auflösung, siehe mein simpel Beispiel. Selbst daraus errechnet sich jetzt welche Note und wie lang sie ist.
Diesen wert speicherst Du im array, wie beim einlesen! Änderst Du jetzt die Auflösung wird die Note aus denm array geholt und gezeichnet! Auch hier wieder mein simpel Beispiel.

Das selbe gilt für das speichern deines Formates, du must nicht die Darstellung speichern(wenn ich es richtig verstanden habe) sondern nur die Note und ihre länge zum Takt und nicht wie lang sie gezeichnet werden muss!


Der rest ist dann so wie ich es beschrieben habe.
Ich befürchte aber das das umstellen schwerer sein wird als es so zu lassen! Weil Du dich auf 12x12 fixierst hast!

Gruss alfold

Geändert von alfold (19. Mai 2011 um 23:37 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#249
  Alt 20. Mai 2011, 02:10
Zitat:
OK fangen wir hinten an!
Du liest eine Mid ein!
Was ist jetzt das Problem, die Noten kannst du in ein normales Array laden, auch ohne Grid.
Takt und BPM liegen auch vor.
Mache nichts anderes.
Nur das ich Sie nach dem einlesen in mein Array auf meinen DateiTyp anpasse (Parsen).
Zitat:
ist es auch egal ob Du 40pixel für eine Note nimmst oder nur 10pixel.
Enscheident ist jetzt, welche Note wo gezeichnet wird!
Ist nicht egal die Noten werden in einer Breite von 12 und einer höhe von 12 gezeichnet.
das mußt du doch sehen wenn du in einer reihe im Grid Klickst.
Nochmal..
0..15 Spur die legst du fest indem du auf EditTrack 1 klickst
0..1000 Noten.. Scroll das grid ganz runter wenn du nun in der Spalte 0 und Letzte Reihe(72) klickst dann wird im Array Grid die Note "C0" gespeichert
Wird diese erweitert also als halbe Note ausgelegt dann wird dem Array eine (1000 + 72) = 1072 hinzugefügt.
Im Array steht jetzt also 72, 1072. Start und Fortlaufende Note = eine 2/4 Note bei einem 4/4 Takt.
Diese Daten werden dann in der *.mtf Datei abgespeichert.

Zitat:
kannst Du nun die Anzeige machen wie du willst! weil Du das Array nicht änderst sondern nur die Anzeige!
Kann ich auch nicht.
Die Anzeige ist vorgegeben pro Note 12x12

Zitat:
Das selbe gilt für das speichern deines Formates, du must nicht die Darstellung speichern(wenn ich es richtig verstanden habe) sondern nur die Note und ihre länge zum Takt und nicht wie lang sie gezeichnet werden muss!
Genau das mache ich.
Aber du scheinst da irgend etwas nicht zu verstehen.
Ob ich meine Note nun in Hex oder Dezimal in meine Datei schreibe ist doch wurscht.
Die Frage ist doch wie ich die Daten nachher wieder einlese (Parse).
Und das es funktioniert wenn du mein Format liest siehst du doch.

Zitat:
Ich befürchte aber das das umstellen schwerer sein wird als es so zu lassen! Weil Du dich auf 12x12 fixierst hast!
Nö habe mich da nicht fixiert sondern das ist vorgegeben.
Ich habe das Prog so ausgelegt das die Noten nicht in Pixeln sondern in Quadern gezeichnet werden
und um das umzulegen auf Pixel da kann ich direkt alles wieder neu machen.
Und das scheinst du nicht zu verstehen.

Habe dir das schon 20 Beiträge vorher mitgeteilt.
Das ich im moment grenzen unterliege weil meine Grafik(Grid) auf eine feste größe ausgelegt ist.
Vielleicht verstehst du eins nicht das ist NonVCL es gibt keine komponente die man mal
ebend auf die Form klatscht sondern es ist alles Handgemacht mit GDI+.
Nur für das grid ca. 4 Wochen Arbeit(na ja ist Hobby).
Wenn ich das ändere muss ich quasi alles neu machen angefangen bei den Tool Button.

Im moment geht es eh nicht..
Da ich mit einer 6 Segment Anzeige von hand gezeichnet GDI+ beschäftigt bin.
Das hat vorrang da ich damit die Zeitanzeige verwirklichen will.
Passend zu meinem Design natürlich.
Das bedeutet Bilder zeichnen Quelltext schreiben und dann muss es auch noch funktionieren

gruss

Geändert von EWeiss (20. Mai 2011 um 02:31 Uhr)
  Mit Zitat antworten Zitat
alfold

 
Delphi 7 Enterprise
 
#250
  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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
Delphi-Forum.de - Array statisch/dynamisch oder TList fr Midi-Events This thread Refback 20. Sep 2011 15:59

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