MIDI: конвертировать BPM в дельта-время FPS? - PullRequest
1 голос
/ 08 июля 2010

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

0x00C0

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

Для получения дополнительной информации о MIDI Delta Time, пожалуйста, посмотрите Формат файла Midi в разделе «Заголовок» -> «Деление времени».

Я ищу формулу, которая будет преобразовывать эти два типа дельта-времени.

1 Ответ

2 голосов
/ 08 июля 2010

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

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

y = x тиков старых * (1/192) ударов / тиков старых * p & mu; с / ударов * (1/10 6 ) sec / & mu; sec * F кадров / сек * G галочки new / frame
= ((x * p * F * G) / (192 * 10 6 )) галочки новые

...