Временной код MIDI ( MTC ) встраивает ту же информацию о синхронизации, что и стандартный временной код SMPTE, в виде серии небольших сообщений MIDI «четверть кадра» . В стандартных сообщениях временного кода MIDI не предусмотрено пользовательских битов, и вместо этого для передачи этой информации используются сообщения SysEx . Сообщения четверть кадра передаются последовательностью из восьми сообщений, таким образом, полное значение временного кода указывается каждые два кадра. Если поток данных MIDI работает близко к емкости, данные MTC могут прибывать с небольшим отставанием от графика, что приводит к появлению небольшого количества джиттера. Чтобы избежать этого, идеально использовать полностью отдельный порт MIDI для данных MTC. Более крупные полнокадровые сообщения, которые инкапсулируют значение кадра временного кода в одном сообщении, используются для определения времени, пока временной код не запущен.
В отличие от стандартного тайм-кода SMPTE, сообщения четвертькадрового и полнокадрового тайм-кода MIDI содержат двухбитное значение флага, которое идентифицирует скорость тайм-кода, указывая ее как:
MTC различает скорость фильма и скорость видео только по скорости, с которой продвигается тайм-код, а не по информации, содержащейся в сообщениях тайм-кода; таким образом, пропуск кадров со скоростью 29,97 кадра/с представляется как пропуск кадров со скоростью 30 кадров/с при понижении на 0,1%.
MTC позволяет синхронизировать секвенсор или DAW с другими устройствами, которые могут синхронизироваться с MTC, или для этих устройств, чтобы они «подчинялись» ленточному аппарату, который имеет полосу SMPTE. Для этого необходимо использовать преобразователь SMPTE в MTC. Ленточный аппарат может синхронизироваться с сигналом MTC (если он преобразован в SMPTE), если ленточный аппарат может «подчиняться» входящему таймкоду через управление двигателем, что является редкой функцией.
Длина кода времени MIDI составляет 32 бита, из которых 24 используются, а 8 бит не используются и всегда равны нулю. Поскольку сообщения полного кода требуют, чтобы самые значимые биты каждого байта были равны нулю (действительные байты данных MIDI), на самом деле доступно только 28 бит и 4 запасных бита.
Как и большинство аудиовизуальных таймкодов, таких как таймкод SMPTE , он кодирует только время суток, повторяясь каждые 24 часа. Время указывается в единицах часов, минут, секунд и кадров . В секунду может быть 24, 25 или 30 кадров.
В отличие от большинства других таймкодов, компоненты кодируются в прямом двоичном формате, а не в двоично-десятичном .
Каждому компоненту присваивается один байт:
0rrhhhhh
: Скорость (0–3) и час (0–23).rr = 00
: 24 кадра/сrr = 01
: 25 кадров/сrr = 10
: 29,97 кадров/с ( временной код SMPTE с пропуском кадров )rr = 11
: 30 кадров/с00mmmmmm
: Минута (0–59)00ssssss
: Секунда (0–59)000fffff
: Кадр (0–29 или меньше при более низкой частоте кадров )При скачке временного кода отправляется один полный временной код для синхронизации подключенного оборудования. Это принимает форму специального глобального системного эксклюзивного сообщения:
F0 7F 7F 01 01 hh mm ss ff F7
Идентификатор производителя 7F
указывает на универсальное сообщение в реальном времени, канал 7F
указывает на глобальную трансляцию. Следующий идентификатор 01
указывает на то, что это сообщение типа временного кода, а второй 01
указывает на то, что это сообщение полного временного кода. Далее следуют 4 байта временного кода. Хотя MIDI обычно имеет порядок байтов little-endian, 4 байта временного кода следуют в порядке big-endian, за которыми следует F7
байт «end of exclusive».
После перехода таймер останавливается до тех пор, пока не будет получено первое следующее сообщение в четверть кадра.
Когда время идет непрерывно, 32-битный временной код разбивается на 8 4-битных частей, и одна часть передается в каждом четверть кадра. То есть 96—120 раз в секунду, в зависимости от частоты кадров. Поскольку для полного сообщения временного кода требуется восемь четвертных кадров, полное время SMPTE обновляется каждые два кадра. Сообщения в четверть кадра состоят из байта состояния 0xF1, за которым следует одно 7-битное значение данных: 3 бита для идентификации части и 4 бита частичного временного кода. Когда время идет вперед, номера частей увеличиваются от 0 до 7; со временем, когда передается часть 0, это закодированный момент, а остальные части передаются позже.
Если поток MIDI-данных перематывается, номера частей отсчитываются в обратном порядке. Опять же, часть 0 передается в закодированный момент.
Временной код делится в порядке от младшего к старшему следующим образом:
Кусок # | Байт данных | Значение |
---|---|---|
0 | 0000 ffff | Номер кадра lsbits |
1 | 0001 000f | Номер кадра msbit |
2 | 0010 ssss | Вторые лсбиты |
3 | 0011 00ss | Вторые мсбиты |
4 | 0100 mmmm | Минутные lsbits |
5 | 0101 00mm | Минута мсбит |
6 | 0110 hhhh | Часовые лсбиты |
7 | 0111 0rrh | Скорость и час мбит |