MIDI Time Code (MTC)
Еще одним очень распространенным форматом временного кода является MIDI Time Code (MTC).
По сути, он является тем же SMPTE, но передаваемым по протоколу MIDI. В MTC принят такой же формат времени (часы:минуты:секунды:кадры) и частоты кадров, что и в SMPTE. Так как в стандарте MIDI передача происходит восьмибитными блоками, каждый кадр SMPTE разбивается на восемь частей: первые две несут информацию о часе, вторые - о секунде и т. д. Восемь блоков вместо необходимых четырех получаются потому, что, кроме собственно значений времени, как минимум половина данных приходится на сопроводительную информацию. Помимо этого, по MTC, в отличие от SMPTE, передается кадровый формат временного кода (24, 25 fps и т. д.). Блоки данных MTC передаются четыре раза за кадр (они так и называются: quarter frame, четверть кадра). Таким образом, на передачу всей информации об одном блоке SMPTE затрачивается время, равное двум кадрам (восемь четвертей кадра). Соответственно, при преобразовании из SMPTE в MTC только половина кадров (через один) попадает в MIDI тайм-код. С одной стороны, это несколько снижает скорость реакции ведомого устройства - для того, чтобы оно прочитало текущую позицию SMPTE, нужно получить восемь четверть-кадров, что в реальном времени может занять от двух до четырех кадров, в зависимости от того, в какой момент начался прием. С другой стороны, частота получения информации о скорости (она извлекается из поступающих четверть-кадров), по сравнению с SMPTE, выше в четыре раза, что способствует более качественной синхронизации. Для того, чтобы указать точку старта устройству еще до поступления временного кода, применяется MTC Full Frame Message - это сообщение SysEx (System Exclusive), в котором передается временная координата сразу и целиком. После получения такого сообщения прибор перематывает ленту (или ставит курсор) на требуемое место по шкале SMPTE. Такие полноформатные сообщения иногда используются при перемотке ленточных магнитофонов (если при этом не считывается временной код) - ведущий периодически посылает ведомому сообщения Full Frame, чтобы тот "не расслаблялся" и тоже перематывал ленту. В наше время с повсеместной записью на жесткий диск использование таких сообщений в большинстве случаев утратило актуальность. Передача пользовательской информации (user bits) поддерживается в MTC, здесь также используются специальные SysEx сообщения.
Отличительной особенностью формата MTC является то, что он сам по себе не может быть никуда записан, а только вычисляется, исходя из размера и темпа произведения, в секвенсоре или в цифровых магнитофонах и компьютерных рабочих станциях на основе частоты дискретизации и "порядкового номера" семпла. Еще одним источником MTC может быть преобразование SMPTE в MTC, которое могут производить многие современные MIDI-интерфейсы и синхронизаторы. Из-за того, что MIDI Time Code изначально передается в машинно-читаемом формате (а не в виде аудиосигнала, как LTC) и реализация приема-передачи этого временного кода в цифровых аппаратах обходится сравнительно недорого, MTC в настоящее время является главным форматом временного кода, использующегося для синхронизации компьютерных программ и значительной части цифровых звукозаписывающих устройств.
Работа с SMPTE и MTC
Итак, мы уже знакомы с двумя основными форматами временного кода, SMPTE и MTC, и готовы начать что-нибудь с чем-нибудь синхронизировать. Для начала надо убедиться, что временной код в том или ином виде существует на всех синхронизируемых устройствах. На аналоговую ленту его, как уже говорилось, надо сначала записать. Это не так просто, как кажется на первый взгляд. Дело в том, что SMPTE LTC код звучит довольно противно, в этом вы можете убедиться сами, подключив выход генератора SMPTE к своему микшерному пульту. А аналоговая лента имеет один недостаток - зачастую звук "просачивается" между двумя соседними дорожками. И если вокал, немного просочившийся на трек клавишного подклада, не представляет особой проблемы, то даже очень небольшая добавка звука временного кода в аранжировку звучит довольно дико. Для избежания подобных эксцессов SMPTE обычно прописывают на крайнюю дорожку многоканальной ленты (например, первую или двадцать четвертую на 24-дорожечном магнитофоне, тем более, что крайние дорожки обычно звучат хуже внутренних, и под тайм-код их не так жалко) с уровнем от -10 до -5 dB VU. Указанные уровни являются неким усреднением, и конкретные значения для своей системы лучше подбирать опытным путем - уровень должен быть минимальным (чтобы не просачивался), и при этом обеспечивать надежное считывание тайм-кода синхронизатором. Иногда соседнюю с тайм-кодом дорожку оставляют пустой, а если такой возможности нет, то записывают туда что-нибудь мощно звучащее с небольшим динамическим диапазоном, вроде ритм-гитары. Лучше всего подавать временной код на магнитофон прямой коммутацией генератора на записываемую дорожку. Если же сигнал не может быть подан напрямую, то проследите, чтобы он никаким образом не обрабатывался (например, эквалайзером и динамической обработкой пульта). На том канале магнитофона, куда записывается временной код, должна быть выключена система шумоподавления. Если на вашем магнитофоне шумоподавление включается одновременно на всех каналах, и вы, таким образом, не можете изолировать дорожку тайм-кода от работы "шумодава", тогда смиритесь с этим и попробуйте работать с включенным шумоподавлением. В большинстве случаев SMPTE все равно будет устойчиво считываться, но, возможно, придется повысить уровень записи тайм-кода. Если же не заработает, тогда придется выбирать: или синхронизация, или шумоподавление.
Записывать временной код надо обязательно "внахлест", то есть так, чтобы тайм-код начинался хотя бы на 15 секунд раньше музыки и немного позже заканчивался, в идеале же тайм-код должен быть прописан на всю длину ленты. Дело в том, что на синхронизацию ведомому устройству необходимо некоторое время, и если тайм-код будет начинаться одновременно с музыкой, то ведомый прибор просто не успеет к началу, а начнет играть только, допустим, с третьего такта. Имейте в виду, что названная мною величина в 15 секунд условна, время, необходимое для входа в режим синхронизации всей своей системы, вы должны определить опытным путем и с некоторым запасом установить значение "нахлеста". Опять-таки, рекомендую установить эту величину постоянной для любых работ в вашей студии. Даже когда вы не используете ленточный магнитофон (обычно самое медленно синхронизирующееся устройство), а только синхронизируете секвенсор (обычно "цепляется" быстрее всех), не стоит уменьшать время "нахлеста" - там, где сегодня достаточно секвенсора, завтра может понадобиться задействовать всю студию.
Во многих студиях (особенно связанных с видеопроизводством) принято начинать тайм-код не с нуля, а с точки 01:00:00:00 (один час). Это делается для того, чтобы была возможность добавить материал перед тем, над которым ведется работа в настоящий момент. Если возникает подобная необходимость, довольно просто добавить временной код до отметки 1 час и продолжить работу. Если же у нас стартовая точка - ноль, номер часа перед ним будет, соответственно, 23. А многие синхронизаторы довольно болезненно реагируют на переход от 23:59:59:24 к 00:00:00:00 и далее. Например, если магнитофон находится в точке с тайм-кодом, показывающим 23 часа с чем-то, и приходит команда перейти на нулевой час с чем-то, то синхронизатор дает команду мотать ленту назад (к 22-му, 21-му и т. д. часам до 0), а не вперед, где этот ноль на самом деле находится. В общем-то, с точки зрения синхронизатора все логично, но у вас может отнять довольно много времени. Так что если возможны подобные моменты (добавление материала "вперед"), то советую начинать с отметки в 1 час и сделать это стандартом для всей работы студии.
Если мы установили стартовую точку тайм-кода на 1 час, то нам нужно внести соответствующую поправку в те устройства, которые тайм-код рассчитывают, например, секвенсоры. Ведь по умолчанию в любой программе первая доля первого такта произведения соответствует 00:00:00:00 временной сетки, и если на секвенсор приходит тайм-код со значением 01:00:00:00, то он и начнет воспроизводить аранжировку с точки, отстоящей от первого такта на один час. Чтобы этого избежать, и существует параметр offset, или смещение. В нашем случае для правильной работы нужно в секвенсоре установить смещение, равное одному часу, и тогда точка 01:00:00:00 внешнего тайм-кода совпадет с 00:00:00:00 внутренней временной сетки программы. То же самое относится и к другим устройствам, которые не прописывают, а рассчитывают временной код.
Ну вот, временной код прописан, смещения выставлены, пора бы уже приступать к синхронизации. Самой простой и в то же время самой распространенной системой является связка магнитофон-секвенсор. В секвенсор нам ничего прописывать не надо, так как для синхронизации с внешним миром он пользуется MIDI тайм-кодом. Для начала нужно выбрать ведущего в системе. В данном случае самым простым и дешевым способом будет выбрать ведущим аналоговый магнитофон, а ведомым - секвенсор. Заранее прописанный SMPTE тайм-код с ленты подается на вход синхронизатора (роль которого могут исполнять некоторые MIDI-интерфейсы), и синхронизатор преобразует SMPTE в MTC (рис. 3). Последний считывается секвенсором, который стартует в нужной точке и затем подстраивает свою скорость под тайм-код. Для того, чтобы все именно так и произошло, нужно в настройках синхронизации секвенсора указать "следовать за входящим тайм-кодом" (что-то вроде "chase to incoming timecode" или "online"), указать MIDI-порт, по которому будет приходить этот код (MTC), и выставить правильную частоту кадров (хотя у вас она должна быть уже давно установлена во всей студии). Еще несколько лет назад этих действий было бы достаточно для надежной синхронизации магнитофона и секвенсора. Но сейчас многие секвенсоры могут сами выступать в качестве многодорожечного магнитофона, записывая звук на жесткий диск компьютера через звуковую плату. Поэтому в настройках синхронизации присутствует опция, предлагающая два варианта: воспроизведение MIDI со скоростью, определяемой входящим MTC, или скорость будет определяться проигрывающимся звуком с жесткого диска. В последнем случае секвенсор из приходящего тайм-кода берет только стартовую точку, а скорость воспроизведения MIDI-нот будет зависеть от частоты дискретизации звуковой платы (на тайм-код уже никто не смотрит), ведь именно ей пропорциональна скорость проигрывания аудиофайлов с диска компьютера. Если вы ничего не поняли из последней фразы, не отчаивайтесь, все это будет подробно рассмотрено немного позднее, а сейчас важно уяснить, что, если из секвенсора у нас идут только MIDI-ноты (без звука с жесткого диска), то нужно выбрать первый вариант (скорость постоянно подстраивается под входящий MTC).