Tengo un formato de nota con latidos representados como fracciones de medida que quiero convertir a tiempo real (segundos).
Así que dados estos datos:
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
Derivé la fórmula para calcular:
# 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)
Dando me:
@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
Así que mi pregunta es, ¿cómo deberían verse afectados los tiempos de las notas siguientes si hubiera un cambio de BPM después de la nota 2? Si los bpm aumentaron a 200, ¿cuáles deberían ser los tiempos de las próximas 6 notas?
Si piensas en términos de álgebra, el BPM es como la pendiente de una línea en y = mx + b. Aquí y = mt + b
donde y
es un latido y t
es tiempo discreto (cuantificado). Para el primer BPM, b = 0 porque la pendiente comienza en t = 0. Cuando cambias a un nuevo BPM, ¡necesitas una intersección y distinta de cero! Ese intercepto en y tendrá que permanecer allí para siempre.
Una forma de hacerlo es incluir una referencia a la última nota antes del cambio de bpm en t = 2,5.
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) )
Observe cómo cambia la cuadrícula de tiempos, comenzando en la posición 0 del compás 0 para los nuevos bpm. Esto es como restablecer el eje del tiempo en álgebra t = 2.5 -> t = 0.0
.
Para especificar la intersección y sin cambiar la cuadrícula de pulsos , hay una manera, pero aún necesitamos referirnos a la última nota antes de que cambien los BPM. Supongamos que tenemos dos pendientes de BPM, a = 1.8461
y b = 1.2
, que se refieren a 130 BPM y 200 BPM, respectivamente. Observe que at = bt + (a-b)t_fixed
, donde t_fixed
es una constante que representa cuándo se cambiaron los bpm. Esta fórmula nos permite expresar la nueva temporización de las notas utilizando la misma cuadrícula de tiempos:
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) )
Debe notar que en su sistema, los valores entre paréntesis representan ataques o inicios de las notas. Las notas no tienen sustain, así que esto es como programar una caja de ritmos. Entonces, en su sistema, 'después del final de la segunda nota' significa 'después del comienzo de la tercera nota'. En MIDI, también debe codificar cuando finaliza la nota (con eventos de "Nota desactivada").
Нет войне
Tim
Dekkadeci
Tim
pavo real flaco
Brenth Andrew J. Miras
Brenth Andrew J. Miras