Ich habe ein Notenformat mit Beats, die als Taktbruchteile dargestellt werden, die ich in die tatsächliche Zeit (Sekunden) umwandeln möchte.
Angesichts dieser Daten:
number, title, measure, position
1 NOTE 2 0.0
2 NOTE 2 0.25
3 NOTE 2 0.5
4 NOTE 2 0.75
5 NOTE 3 0.0
6 NOTE 3 0.25
7 NOTE 3 0.5
8 NOTE 3 0.75
Ich habe die Formel zum Rechnen hergeleitet:
# This assumes 4/4 time signature, 4 beats per measure so...
1.) measure duration = (60/bpm) * 4;
2.) note timing (seconds) = measure duration * ( measure + position)
Gibt mir:
@130 bpm:
measure duration = (60/130) * 4 = 1.8461...
note timing = 1.8461 * ( measure + position)
number, title, measure, position, (seconds)
1 NOTE 2 0.0 ( 1.8461 * (2 + 0.0 ) )
2 NOTE 2 0.25 ( 1.8461 * (2 + 0.25) )
3 NOTE 2 0.5 ( 1.8461 * (2 + 0.5 ) )
4 NOTE 2 0.75 ( 1.8461 * (2 + 0.75) )
5 NOTE 3 0.0 (and so on...)
6 NOTE 3 0.25
7 NOTE 3 0.5
8 NOTE 3 0.75
Meine Frage ist also, wie sollten die Timings der nachfolgenden Noten beeinflusst werden, wenn es nach Note 2 eine BPM-Änderung geben würde? Wenn die BPM auf 200 erhöht werden, was sollten die Timings der nächsten 6 Noten sein?
Wenn Sie algebraisch denken, ist der BPM wie die Steigung einer Linie in y = mx + b. Hier ist ein Beat und eine y = mt + b
diskrete (quantisierte) Zeit. Für den ersten BPM ist b = 0, da die Steigung bei t = 0 beginnt. Wenn Sie zu einem neuen BPM wechseln, benötigen Sie einen y-Achsenabschnitt ungleich Null! Dieser y-Abschnitt muss für immer dort bleiben.y
t
Eine Möglichkeit, dies zu tun, besteht darin, einen Verweis auf die letzte Note vor dem BPM-Wechsel bei t = 2,5 einzufügen.
BPM#1 measure duration = (60/130) * 4 = 1.8461
BPM#2 measure duration = (60/200) * 4 = 1.2
number, title, measure, position, (seconds)
1 NOTE 2 0.0 ( 1.8461 * (2 + 0.0 ) )
2 NOTE 2 0.25 ( 1.8461 * (2 + 0.25) )
3 NOTE 2 0.5 ( 1.2 * (0 + 0.0 ) + 1.8461 * (2 + 0.5 ) )
4 NOTE 2 0.75 ( 1.2 * (0 + 0.25) + 1.8461 * (2 + 0.5) )
5 NOTE 3 0.0 ( 1.2 * (0 + 0.50) + 1.8461 * (2 + 0.5) )
6 NOTE 3 0.25 ( 1.2 * (0 + 0.75) + 1.8461 * (2 + 0.5) )
7 NOTE 3 0.5 ( 1.2 * (1 + 0.0 ) + 1.8461 * (2 + 0.5) )
8 NOTE 3 0.75 ( 1.2 * (1 + 0.25) + 1.8461 * (2 + 0.5) )
Beachten Sie, wie sich das Beatgrid ändert, beginnend bei Takt 0 Position 0 für die neuen BPM. Das ist wie das Zurücksetzen der Zeitachse in der Algebra, t = 2.5 -> t = 0.0
.
Um den y-Abschnitt anzugeben , ohne das Beatgrid zu ändern , gibt es eine Möglichkeit, aber wir müssen uns immer noch auf die letzte Note beziehen, bevor sich die BPM ändert. Angenommen, wir haben zwei BPM-Steigungen a = 1.8461
und b = 1.2
, die sich auf 130 BPM bzw. 200 BPM beziehen. Beachten Sie, dass at = bt + (a-b)t_fixed
, wobei t_fixed
eine Konstante ist, die darstellt, wann die BPM geändert wurden. Mit dieser Formel können wir das neue Timing der Noten mit demselben Beatgrid ausdrücken:
BPM#1 measure duration = (60/130) * 4 = 1.8461
BPM#2 measure duration = (60/200) * 4 = 1.2
number, title, measure, position, (seconds)
1 NOTE 2 0.0 ( 1.8461 * (2 + 0.0 ) )
2 NOTE 2 0.25 ( 1.8461 * (2 + 0.25) )
3 NOTE 2 0.5 ( 1.2 * (2 + 0.50) + (1.8461 - 1.2) * (2 + 0.5 ))
4 NOTE 2 0.75 ( 1.2 * (2 + 0.75) + (1.8461 - 1.2) * (2 + 0.5) )
5 NOTE 3 0.0 ( 1.2 * (3 + 0.0 ) + (1.8461 - 1.2) * (2 + 0.5) )
6 NOTE 3 0.25 ( 1.2 * (3 + 0.25) + (1.8461 - 1.2) * (2 + 0.5) )
7 NOTE 3 0.5 ( 1.2 * (3 + 0.50) + (1.8461 - 1.2) * (2 + 0.5) )
8 NOTE 3 0.75 ( 1.2 * (3 + 0.75) + (1.8461 - 1.2) * (2 + 0.5) )
Sie sollten beachten, dass in Ihrem System die Werte in Klammern Attacken oder Einsätze der Noten darstellen. Die Noten haben kein Sustain, das ist also wie das Programmieren eines Drumcomputers. In Ihrem System bedeutet „nach dem Ende der zweiten Note“ also „nach dem Beginn der dritten Note“. In MIDI müssen Sie auch codieren, wann die Note endet (bei "Note Off"-Events).
Нет войне
Tim
Dekkadeci
Tim
magerer Pfau
Brenth Andrew J. Miras
Brenth Andrew J. Miras