Как преобразовать среднюю временную шкалу в фактическую временную шкалу, которую следует воспроизвести - PullRequest
6 голосов
/ 13 марта 2011

Я уже некоторое время исследую эту тему, но до сих пор не понял.Я использую библиотеку midas3 (Midi-actionscript3), чтобы импортировать midi для прошивки.Я получаю каждую заметку на временной шкале.Я получаю значение деления (192), и все элементы «GET-TEMPO» равны 81.

Я пробовал много комбинаций, чтобы получить фактическое время миди, но все равно не получилось (временная шкала *192/60, например).

Причина, по которой я знаю, что она не синхронизирована с фактическим временем, заключается в том, что когда я визуализирую заметки как простые прямоугольники во флэш-памяти, я проверяю, отображаются ли они точно в том, что воспроизводит mp3-файл(Я конвертировал миди-файл в этот mp3, используя простую программу конвертации)

Я много читал о том, как все рассчитывается, но все еще не определил число, которое мне нужно использовать, чтобы получить его правильно (график времени* MysteriusConstant = ReaTIME, каково значение MysteriusConstant? Действительно ли оно постоянное? И если нет, то как рассчитать, как оно изменяется?)

благодаря Алону

1 Ответ

8 голосов
/ 14 марта 2011

Если я правильно понимаю ваш вопрос, вы в основном хотите преобразовать тики для каждой ноты MIDI в значение в миллисекундах, чтобы вы могли визуально отображать ноты на временной шкале.

Итак, во-первых, вам нужно использовать деление и темп для определения значения отдельного тика. Это преобразование в основном выглядит так:

 [  1 min    60 sec   1 beat     Z clocks ]
 | ------- * ------ * -------- * -------- | = seconds
 [ X beats   1 min    Y clocks       1    ]

Итак, в приведенном выше преобразовании X - это темп, Y - это деление, а Z - это количество часов от входящего события. Вы можете видеть, как все единицы отменяются, давая вам значение в секундах. Следовательно, сокращенная версия этого преобразования:

(60 * clocks) / (tempo * division) = seconds

Имейте в виду, что значение, указанное здесь в seconds, представляет собой количество секунд с момента предыдущего события MIDI, а не с начала последовательности. Вам нужно будет сохранить промежуточную сумму этого значения, чтобы построить последовательную последовательность.

...