Entwickler-Ecke

Multimedia / Grafik - MIDI Noten im Grid selber zeichnen berechnen?


ALF - Sa 25.06.11 15:58
Titel: MIDI Noten im Grid selber zeichnen berechnen?
Hab lange überlegt wie ich den Title nennen soll.
Vor allen, ob ich es richtig formuliert habe, Mein Problem :roll:

Vorab folgende Grundlage.
Alles basiert auf 1/4tel Note.
Soll heissen 1/4tel Note enspricht eine Spalte im Gid, in Abhängigkeit der Darstellenden Note.
Standard Einstellung ist 1/4, 1/4, 4/4.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
Duration: ist die zu zeichnenden Notenlänge im Takt pro Darstellende Note
     Value
1/1  4
1/2  2
1/4  1
1/8  0.5 
1/16 0.25
1/32 0.125
1/64 0.0625

<span style="color: red">Darstellende Note im Grid pro 1/4tel Note</span>
     Value
1/4  1
1/8  2  
1/16 4
1/32 8
1/64 16

Takt Arten: Wieviel Darstellende Noten reinpassen im Takt
     Value
2/2  4
3/2  6
4/2  8
2/4  2
3/4  3
4/4  4
5/4  5
6/4  6
9/4  9
usw



Bei der standard Auflösung gibt es kein Problem.
Solange ich nur ein ValueWert zur Anzeige benutzte.

Wenn ich 2 Valuewerte berechne naja, schon schwierigkeiten. Bei drei total Confus.

Hier mal 2 Beispiele:
1.
Duration: 1/1 value 4
Darstellende Note 1/4 value 1
4 div 1 * taktarten.Value funct klar

2.
Duration: 1/2 value 2
Darstellende Note value 1
2 div 1 * taktarten.Value kann nicht funcen

Dafür nun ne Formel mit 3 Values omg.

Ich bekomme es nicht zusammen wie die ValueWerte berechnet werden mussen das der zu zeichnede Balken die breite X im Grid einnimmt. Entweder er ist zu kurz oder zu lang. Ne Formel kann ich nicht anbieten, da ich alles erst auf Papier schreibe um überhaupt nen kleinen Überblick zu bekommen, wie wo was mit einander abhängig wird. Dabei habe ich schon festgestellt das irgend wo 1 bis 2 zuviel oder zu wenig als Ergebnis rauskommen. Aber wie verrechne ich diese +- Überträge.

Sind also wieder mal Mathe Asse gefragt.
Ich hoffe ihr könnt mir da Helfen.

Gruss ALf


ALF - Mo 27.06.11 10:35

Ok, ich merg schon, sch***** formuliert.
Mal anders

const = 4

a = 4, 2, 1, 0.5, 0.25, 0.125, 0.0625
b = 2, 3, 4, 5, 6, 7, 8, 9
c = 1, 2, 4, 8, 16,

x muss folgendes Ergebnis liefern

1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 32, 64

mal so ein Versuch von vielen.
x= ((b div a) - ((b div a) - a)) * c

Meine Versuche und zich andere, klar können nicht funcen sonst würde ich ja hier nicht fragen :wink:

Frage wie muss diese Formel aussehen oder sollte ich hier lieber mit
if (a = so) and (b = so) then rechne so, arbeiten um die richtien Ergebnisse zu bekommen

Oder muss ich noch die constante 4 mit einbinden

für mich also hochkomplex diese Aufgabe.
Gruss Alf


ALF - Di 28.06.11 15:19

So hab es nun mif if Abfragen gelöst und es funct.
Hab allerdings oben noch mal Werte korrigieren müssen.
Das ganze ist jetzt in einer funktion untergbracht.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if a = 4 then
 result:= round((b * 1) * c)
else
if a = 2 then
 result:= round((b / (b / a)) * c)
else
if a <= 1 then
 result:= round(a * c)


Ob sich dies allerdings lohnt in eine Formel zu packen, wenn es geht, ist fraglich. Wegen der Übersichtlichkeit.

Gruss Alf