Wie wirken sich BPM-Änderungen auf das Timing von Noten aus?

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?

Ist in diesem Format der Anfang des Stücks Takt 1 oder Takt 0? Und wenn Sie sagen "wenn es nach Note 2 eine BPM-Änderung geben würde", meinen Sie unmittelbar nach Note 2 oder kurz vor Note 3? oder irgendwo dazwischen?
Was auch immer Sie zu sortieren versuchen, Musik hackt und ändert in 99,9% der Fälle nicht ihre BPM. Das ist einer der liebenswerten Faktoren – halten Sie sich an einen Rhythmus/ein Tempo und genießen Sie es. Natürlich können Sie ein Programm schreiben, das dies umfasst, aber für mich ist es ein kaputter Bleistift - sinnlos ...
@Tim, hast du noch nie Stücke gehört, die am Ende langsamer oder schneller werden? Sie waren ziemlich häufig, als ich Klavier übte.
@Dekkadeci - komischerweise ja. Aber sie hatten nie eine Änderung der BPM festgestellt! Es hieß/heißt rubato/accelerando/deccelerando und wir haben einfach weiter gemacht...
Wenn das die neue Musik ist, muss ich wieder zur Schule gehen.
@Tim Ich erstelle gerne ein Rhythmusspiel und benötige eine oder mehrere BPM-Änderungen mitten im Song.
@topomorto das Stück beginnt bei Takt 0, aber vor Takt 1 wären keine Noten vorhanden. Die BPM-Änderung kann jederzeit zwischen Note 2 oder Note 3 erfolgen.

Antworten (1)

Wenn Sie algebraisch denken, ist der BPM wie die Steigung einer Linie in y = mx + b. Hier ist ein Beat und eine y = mt + bdiskrete (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.yt

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.8461und b = 1.2, die sich auf 130 BPM bzw. 200 BPM beziehen. Beachten Sie, dass at = bt + (a-b)t_fixed, wobei t_fixedeine 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).