MIDI: Преобразовать BPM во время дельты кадр/с?

Учитывая BPM (удары в минуту) время дельты MIDI (крайний левый бит прочь) со скоростью 192:

0x00C0

Я хочу преобразовать его в FPS/TPM (кадры в секунду / галочки в минуту) время дельты (крайний левый бит на), но это должно быть то же (или самое точное) значение скорости, если Вы понимаете, о чем я.

Для большего количества информации о MIDI Время Delta смотрите на Формат файла Midi под Блоком Заголовка-> Временное разделение.

Я ищу формулу, которая преобразует между этими двумя типами deltatime.

1
задан Matthieu Brucher 28 December 2018 в 11:59
поделиться

1 ответ

Если вы говорите о 0x00C0 как о поле деления времени, то вы имеете в виду не 192 удара в минуту, а скорее 192 тика на удар, совсем другой зверь. BPM задается косвенно через события "Set Tempo", задается в микросекундах на такт (при этом, как ни прискорбно, вначале принимается вездесущий темп 120 BPM). Хитрость деления времени в этом формате заключается в том, что длина тика будет увеличиваться и уменьшаться в зависимости от изменения темпа песни.

Допустим, в формате временного деления, который вы хотите преобразовать, F - кадры в секунду (24, 25, 29,97 или 30), а G - тики в кадре (note: это не тики в минуту!). Далее, предположим, что текущий темп в микросекундах на такт равен p. Тогда формула для преобразования заданной длительности в тикахold в тикиnew (анализ единиц измерения очень помогает! ):

y = x ticksold * (1/192) beat/ticksold * p μsec/beat * (1/106) sec/μsec * F frames/sec * G ticksnew/frame
   = ((x * p * F * G)/(192*106)) ticksnew

2
ответ дан 2 September 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: