Учитывая BPM (удары в минуту) время дельты MIDI (крайний левый бит прочь) со скоростью 192:
0x00C0
Я хочу преобразовать его в FPS/TPM (кадры в секунду / галочки в минуту) время дельты (крайний левый бит на), но это должно быть то же (или самое точное) значение скорости, если Вы понимаете, о чем я.
Для большего количества информации о MIDI Время Delta смотрите на Формат файла Midi под Блоком Заголовка-> Временное разделение.
Я ищу формулу, которая преобразует между этими двумя типами deltatime.
Если вы говорите о 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