Если вы говорите, что 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 )) галочки новые