Синхронизация
Для того чтобы создавать любую музыку с помощью MIDI-инструментов, вам потребуется синхронизировать эти устройства друг с другом. Первое, что вам нужно решить, — какое устройство будет посылать MIDI-команды (его называют ведущим), а какие будут их принимать (их называют ведомыми). Процесс синхронизации MIDI-устройств немного варьируется в зависимости от конкретных конфигураций. В следующих разделах будет описано несколько моделей синхронизации.
Рис. 5.7. При синхронизации двух синтезаторов MIDI-кабель подключать нужно вот таким образом
Синхронизация нескольких синтезаторов
Согласно первому сценарию, синхронизации подлежат синтезатор и звуковой модуль (или два синтезатора) (рис. 5.7).
В этом случае тот инструмент, на котором вы реально будете играть, и нужно сделать главным. Свяжите MIDI-кабелем его выходной порт с входным портом звукового модуля (или пассивного синтезатора). Если устройств у вас больше двух, то транзитный порт ведомого устройства можно связать с третьим устройством, и т.д. В одну цепочку можно связать до 16 устройств.
Следующий шаг предполагает конфигурирование всех устройств так, чтобы они могли принимать только сообщения, адресуемые непосредственно им. Не забывайте, что все устройства работают по-разному, поэтому я не могу предусмотреть все возможные варианты процесса конфигурирования. Внимательно ознакомьтесь на этот счет с руководством пользователя своего инструмента. Следующая последовательность действий поможет вам синхронизировать два синтезатора.
1. В системных параметрах главного устройства выберите пункт Master.
В системном окне обычно отображаются сведения о программном обеспечении вашего устройства.
2. Во всех остальных устройствах выберите пункт Slave.
Для этого, как правило, нужно воспользоваться меню MIDI-синхронизации программного обеспечения вашего устройства.
3. Убедитесь, что все устройства в цепочке установлены в режим 3 или 4, в зависимости оттого, нужна вам полифония или нет.
4. Каждому устройству, подключенному к главному, назначьте отдельный MIDI-канал.
Настройки канала обычно содержатся в системных параметрах вашего устройства. Например, в звуковом модуле ddrum4 нужно щелкать на кнопке SYSTEM до тех пор, пока курсор не появится перед словом MIDI, после чего с цифровой клавиатуры следует ввести номер нужного канала. Вы можете выбрать любой из шестнадцати каналов (1… 16), однако если вы работаете с ритм-машиной, выставьте ее канал в номер 10, так как стандарт GM использует для электронных барабанов по умолчанию именно его.
5. Теперь играйте на основной клавиатуре.
При этом другие MIDI-устройства будут воспроизводить соответствующие звуки. Если вы ничего не слышите, проверьте, правильный ли MEDI-канал вы выбрали.
Источник
Синхронизация компьютерного секвенсора и синтезатора
Если вы используете компьютер или секвенсор и хотите его синхронизировать со звуковым модулем или с синтезатором, выполните предлагаемые ниже действия.
Прежде всего вам нужно подключить синтезатор к MIDI-интерфейсу, который, в свою очередь, подключить к компьютеру. Протяните соответствующий кабель от MIDI-интсрфсйса к соответствующему разъему компьютера. Например, если вы соединяете MIDI-контроллср и компьютер по портам USB, используйте для этого кабель USB.
Затем подключите MIDI-интерфейс к синтезатору. Для этого нужно соединить выходной порт синтезатора с входным MIDI-портом интерфейса. После этого соедините кабелем выходной MIDI-порт интерфейса с входным портом синтезатора. Это обеспечит двунаправленное соединение между этими устройствами (рис. 5.8).
Если вы используете синтезатор для воспроизведения MIDI-последовательностей, запрограммированных на компьютере, вам потребуется установить синтезатор в режим Local Off. Это отключит клавиатуру от звуков синтезатора и позволит процессу секвенсирования пройти более гладко. После этого потребуется активизировать транзитную функцию в программе секвенсора, чтобы MIDI-информация, посылаемая с клавиатуры, возвращалась на синтезатор. Это позволит прослушивать партию, которую вы будете записывать с клавиатуры.
Рис. 5.8. Так синхронизируются компьютерный секвенсор и синтезатор
Если вы не установите синтезатор в режим Local Off, то создадите так называемое короткое замыкание обратной связью (т.е. собственную обратную связь) (feedback loop). Это значит, что клавиши синтезатора и секвенсор будут посылать одни и те же сообщения генератору звуков синтезатора, вследствие чего все звуки будут звучать дважды. В лучшем случае ноты будут повторяться, а в наихудшем — склеенные или отдающие эхом звуки и, возможно, ‘‘жеваные” (jammed) сообщения могут вообще заблокировать систему.
Если вы выбрали канал и все при этом сделали правильно, вы сможете наиграть мелодию на синтезаторе, увидеть ее зарегистрированной в секвенсоре и воспроизвести ее. Если этого не произошло, проверьте еше раз сделанные настройки.
Временной код MIDI, MIDI-часы
Если вы хотите синхронизировать два устройства с помощью временных сообщений MIDI, у вас есть выбор: вы можете это сделать с помощью временного кода MIDI (MIDI Time Code) и с помощью MIDI- часов; а также с помощью частоты кадров и карты темпа, или дорожки синхронизации. Эта терминология может звучать для вас несколько непонятно, поэтому мы остановимся на кратком описании этих вариантов.
Временной код MIDI использует в своих сообщениях абсолютное время (фактическое время, прошедшее с начала песни или другой точки отсчета и выраженное в часах, минутах, секундах, кадрах и подкадрах). Эти данные затем преобразуются в SMPTE-сообщения (тип данных синхронизации, используемый в кино и на телевидении). Если вы выбрали вариант МТС, то должны решить, какую частоту кадров вы будете использовать для кодирования времени. Существует несколько стандартных частот кадров, которые ассоциируются с различными информационными носителями.
24 fps (кадров в секунду). Эта частота в основном используется в кино.
25 fps. Эта частота используется в аудио-, видео- и кинопроизводстве в странах Европы и других регионах с принятым в телевидении форматом PAL или SECAM.
29,97 fps. Эта частота используется в цветном телевидении в США, Японии и других странах с принятым форматом телевидения NTSC.
30 fps. Эта частота используется в черно-белом телевидении в США (в Европе черно-белое телевидение использует частоту 25 fps).
Если вас это не запутает дополнительно, частоты 29,97 и 30 fps также используют форматы со сбросом кадра и без такового. Это может звучать слишком технично, но форматы со сбросом кадра сбрасывают два кадра в минуту, за вычетом одной десятой минуты для того, чтобы временные данные в точности соответствовали часам. Эти форматы в основном используются в видеопередачах, идущих в реальном времени.
MIDI-часы отличаются от МТС тем, что время в них отслеживается по тактам и измеряется не в секундах и минутах. Сообщения MIDI-часов обычно посылаются каждые 1/24 такта, однако многие программы секвенсоров можно настроить на более высокую частоту. Программа Cubase VST версии 5 может быть настроена на частоту 1920 PPQ (импульсов за одну ноту длительностью в одну четверть).
При выборе MIDI-часов потребуется выбирать между картой темпов и дорожкой синхронизации. Карта темпов (Tempo map). В своей основе – это раскладка темпов и временных обозначений, используемых в музыкальной пьесе. Для использования карты темпов при синхронизации SIAB или секвенсора потребуется создать саму карту. Эта процедура в каждой системе имеет свои индивидуальные особенности, поэтому в подробности здесь мы вникать не будем.
Дорожка синхронизации. Это — дорожка (по крайней мере, в аналоговых рекордерах это была действительно физическая дорожка), на которой записывается темп и откладываются единицы измерения времени. Для того чтобы использовать дорожку синхронизации, ее нужно вначале специально записать. Если вы работаете с цифровым рекордером, реальную дорожку для этого вам записывать не придется.
Итак, что выбрать? Это, конечно, очень хороший вопрос, но, к сожалению, четкого ответа на него не существует. Конкретное оборудование, имеющееся у вас, диктует часть ответа на этот вопрос (например, Roland VS-1680 SIAB может посылать сообщения MIDI-часов и МТС, однако не всегда эффективно отвечают на эти сообщения). Вторая часть ответа на этот вопрос диктуется назначением вашей музыки. Если вы создаете музыку для кино или телевидения, выбор для вас ясен — 24 fps и 29,97 fps соответственно.
Если ваше оборудование и цели не ограничивают выбор, тогда выбирайте то, что вам больше нравится. Только вначале убедитесь, что обе машины имеют одинаковые настройки.
Источник
Ableton Live Синхронизация через MIDI
Данная статья является частью цикла статей «Ableton Live»
MIDI протокол определяет два способа синхронизации секвенсоров, оба из которых поддерживаются Live. Эти протоколы работают с понятием мастер синхронизации, которая обеспечивает сигнал синхронизации, отслеживающийся ведомой программой или устройством.
- MIDI Clock. MIDI Clock работает как метроном тикая в быстром темпе. Скорость входящих тиков темпо-зависима: Изменение темпа на мастер синхронизации (например, драм-машины), приведёт к тому, что ведомая программа или устройство будет следовать изменениям. Протокол MIDI Clock также предусматривает сообщения, которые указывают на положение воспроизведения песни. Что касается MIDI Clock, Live может действовать и как основной MIDI синхронизатор и как ведомая программа.
- MIDI Timecode. MIDI Timecode это MIDI версия SMPTE протокола, стандартного средства синхронизации ленточных машин и компьютеров в звуковой и киноиндустрии. Сообщения MIDI Timecode определяют время в секундах и кадрах (подраздел секунд). Live будет интерпретировать Timecode сообщения, как место положения в аранжировке. Timecode сообщения не несут никакой информации о размере; когда Live ведом другим секвенсором использующим MIDI Timecode, вам придётся регулировать темп вручную. Изменения темпа не могут быть отслежены. Подробная настройка MIDI Timecode объясняется далее в этой главе. Что касается MIDI Timecode, Live может действовать только как ведомая программа MIDI синхронизации, а не основная.
Содержание
Синхронизация внешних MIDI-устройств к Live [ править ]
Live можете отправлять MIDI Clock сообщения на внешний MIDI-секвенсор (или драм-машину). После подключения секвенсора к Live и установки его в режим приёма MIDI синхронизации, включите устройство, как цель синхронизации в настройках MIDI/Sync Live.
Когда Live будет посылать сообщения синхронизации на внешний секвенсор, то в панели управления, рядом с кнопкой EXT будет мигать нижний индикатор.
Синхронизация Live к внешним MIDI-устройствам [ править ]
С помощью MIDI Live может быть синхронизирован к внешнему секвенсору. После подключения секвенсора к Live и его настройки для отправки синхронизации, используйте настройки MIDI/Sync в Live для того, чтобы сообщить Live о подключении.
При включении внешнего источника синхронизации, в панели управления появляется кнопка EXT. Вы можете активировать внешнюю синхронизацию либо путём включения этой кнопки или с помощью команды External Sync из меню Options. Когда Live будет получать сообщения синхронизации, то рядом с кнопкой EXT будет мигать верхний индикатор.
Когда Live синхронизирован с внешним MIDI-устройством, от данного устройства он может принимать позицию воспроизведения песни, синхронизируясь не только с точки зрения темпа, но и с точки зрения его позиции в песне. Если ведущее устройство переходит на новую позицию в песне, Live будет делать то же самое. Однако, если в панели управления активирован переключатель Loop, воспроизведение будет зациклено, и указатель позиции песни будет просто «завёрнут» в длину лупа.
Параметры MIDI Timecode [ править ]
Параметры Timecode могут быть установлены в MIDI устройстве. Для доступа к настройкам выберите MIDI-устройство из списка MIDI Ports в настройках MIDI/Sync.
Настройка MIDI Timecode Frame Rate актуальна только если из меню MIDI Sync Type выбирается MIDI Timecode. Меню The MIDI Timecode Rate выбирает тип Timecode в котором будет синхронизироваться Live. Имеются все обычные частоты кадров SMPTE. Когда Rate (скорость) установлена в значение SMPTE All, Live будет автоматически определять формат Timecode входящих сообщений синхронизации и интерпретировать сообщения соответственно. Обратите внимание, что вы можете настроить формат Timecode, который будет использоваться для отображения в окне аранжировки: Перейдите в меню Options, а затем получите доступ к подменю Time Ruler Format.
Настройка MIDI Timecode Offset актуальна только если из меню MIDI Sync Type выбирается MIDI Timecode. С помощью этого элемента управления вы можете указать время смещения SMPTE. Live будет интерпретировать это значение как время начала в аранжировке.
Синхронизация задержки [ править ]
Контроллер Sync Delay отдельный для каждого MIDI-устройства, позволяет задерживать основное внутреннее временем Live от сигнала синхронизации. Это может быть полезно для компенсации задержки, добавляемой при передачи сигнала. Sync Delay конкретного MIDI-устройства появляется тогда, когда оно выбрано из списка MIDI Ports в настройках MIDI/Sync. Настройте задержку, чтобы Live и другой секвенсор играли ритмический паттерн с ярко выраженными ударными звуками. Во время прослушивания их выходов, настройте Sync Delay, пока оба звука не начнут звучать в идеальной синхронизации.
Источник
Синхронизация света и звука по MIDI.
Рассмотрим один из вариантов синхронизации с использованием MIDI Notes — управление пультом HOG4PC с помощью программы Abletone Live
Программы находятся на разных компьютерах, и соединены между собой по сети через WiFi или Ethernet с помощью утилиты rtpMIDI (http://www.tobias-erichsen.de/software/rtpmidi.html) По ссылке – подробное руководство по настройке.
В нашем случае система состоит из 2 компьютеров: Cosmos (виртуальное MIDI-устройство CosmosMIDI) с установленным Abletone Live и Lenovo (виртуальное MIDI-устройство LenovoMIDI) с установленным HOG4PC.
Подключение HOG4PC и Abletone Live
Abletone Live выдает MIDI ноты, которыми можно управлять световым пультом HOG4PC
(Также, Abletone Live выдает MIDI таймкод, но HOG4PC его не видит. Возможно, другой формат.)
- В новом или готовом проекте Abletone Live создаем или выбираем пустую дорожку MIDI:
- В редакторе MIDI Note рисуем ноту, например, C#-2, управляющую клавишей Go фейдера №1 в HOG4. (Таблица соответствия MIDI Notes и HOG4 в конце статьи).
В поле MIDI To указываем необходимое MIDI устройство и Ch.1
- В меню Options > Preferences > Midi находим необходимое MIDI устройство. Нам нужен порт Output . В нашем случае OutputCosmosMIDI
- Активируем пункты Track и Sync, как на рисунке.
- В свойствах Notes деактивируем кнопку Loop, чтобы нота не проигрывалась непрерывно:
- Общий вид окна Abletone Live:
— Запуск проигрывания осуществляется нажатием треугольничка:
Abletone Live настроен.
Теперь настраиваем HOG4PC
Setup > Control Panel > MIDI во вкладке Inputs выбираем необходимое виртуальное MIDI-устройство (у нас это LenovoMIDI)
— в окне Network выбираем Console > Setting > вкладка MIDI Notes, ставим галочку Enable MIDI Notes In
— в поле MIDI Channel 1 выбираем Playback Bar Console:
Вот правильная таблица соответствия MIDI Notes и Playback Bar keys:
например, нота C#-2, управляет клавишей Go фейдера №1
(Подробнее о привязке нот к клавишам – в мануале HOG4)
Теперь, при запуске воспроизведения в Abletone Live атоматически нажимается клавиша Go на фейдере №1 в HOG4PC. Аналогичным способом можно управлять любыми клавишами пульта.
Источник
Синхронизация MIDI-устройств
MIDI в деталях. Часть 3 — Системные сообщения.
Третья часть цикла статей, подробно рассказывающих о протоколе MIDI.
Системные сообщения немногочисленны, но берут на себя едва ли не основную нагрузку, когда речь идет о тонком управлении устройством, сохранении и восстановлении настроек, передачи специализированной информации или объединении нескольких устройств в MIDI-систему для совместной работы.
Название сообщений, их статус-байты и формат передачи показаны в таблице на рис. 1. Как видно, большая часть сообщений предназначена для синхронизации и управления воспроизведением. Но, как показывает практика, наиболее активно используются системные эксклюзивные сообщения (SysEx), которые скрываются за одним-единственным статус-байтом 0xF0. Они имеют сложную структуру и произвольную длину.
К общесистемной категории (System Common) относятся пять разнородных сообщений. Первое из них, MTC Quarter Frame, появилось в спецификации в 1987 году вместе с первым расширением протокола (MIDI Time Code). Последующие расширения MIDI стали кодироваться в группе SysEx. О другом общесистемном сообщении, Tune Request(статус-байт 0xF6), расскажу сразу же. Оно дает команду синтезатору произвести подстройку звуковых генераторов и, очевидно, имеет смысл только для старых аналоговых инструментов, у которых через некоторое время после включения начинает «съезжать» строй. Естественно, на это сообщение реагируют только те инструменты, у которых есть схема автоподстройки.
Сообщения категории Real Time имеют в MIDI наивысший приоритет, могут вклиниваться между частями других сообщений и состоят из одного статус-байта, без байтов данных. Они применяются для синхронизации и других задач, критичных ко времени.
Все три типа системных сообщений имеют общую черту — они относятся не к отдельному каналу, а ко всем устройствам MIDI-системы (впрочем, сообщения SysEx можно передавать избирательно, но об этом позже).
Синхронизация MIDI-устройств
До тех пор, пока MIDI-система состоит из синтезаторов, звуковых модулей и одного центра управления — секвенсора (программного или аппаратного), вопрос о синхронизации не стоит. И действительно, что тут и с чем синхронизировать? Секвенсор сам себе хозяин, работает от внутренних часов и при нажатии кнопки Play передает устройствам команды управления.
Другое дело, когда в системе появляется источник звука, содержащий встроенный секвенсор (на языке MIDI-спецификации — Rhythm Unit). Чаще всего это ритм-машинка, иногда — рабочая станция, то есть синтезатор с секвенсором в одном корпусе. Эти устройства можно использовать просто как источники звука, записывая всю управляющую информацию в основной секвенсор. Но иногда их собственный секвенсор и записывающие/ воспроизводящие возможности приходятся очень кстати.
Например, можно «набросать» паттерн в ритм-машинке, запустить его на воспроизведение, а на клавиатуре подбирать партию баса, записывая ее в основной секвенсор. Тонкостей этого процесса мы коснемся позже, в статье про организацию MIDI-систем, но уже ясно: в системе одновременно работают два секвенсора, то есть два устройства, имеющие внутренние часы. Нужно сделать так, чтобы устройства стартовали одновременно и работали в одном темпе, то есть синхронизировать их. Очевидно, одни из часов придется выключить, а вторые сделать общими. Иначе говоря, одно из устройств будет мастером (ведущим), генерирующим сигналы «точного времени», а другое — подчиненным (ведомым), слушающим эти сигналы и работающим с мастером «в такт».
Задолго до появления MIDI применялся сигнал, который представлял собой последовательность обычных импульсов. Они передавались определенное число раз за четвертную ноту, например, 48 или 96. Так как музыкальные длительности относительны, то эти импульсы давали не абсолютное (в минутах и секундах), а относительное время. При повышении темпа частота следования импульсов повышалась, при понижении — понижалась. Этого достаточно, чтобы секвенсоры и ритм-машинки играли в одном темпе, абсолютное время им и не важно. Все бы хорошо, но в разных устройствах применялись разные частоты следования импульсов, поэтому иногда требовались дополнительные преобразователи.
Проблема иного рода состоит в синхронизации секвенсоров и ритм-машинок с магнитофонами. Последние представляют собой устройства другой природы, где скорость движения ленты от темпа произведения не зависит. Непосредственно записать импульсы синхронизации на ленту нельзя, поэтому применяется один из двух методов: FSK-преобразование или таймкод SMPTE. Использование FSK будет рассмотрено в статье про построение MIDI-систем. Что же касается SMPTE, то на его базе был разработан протокол MIDI Time Code (MTC), который сегодня является основным при синхронизации секвенсоров с магнитофонами и другим звуковым оборудованием. Но MIDI Time Code — это уже расширение спецификации, поэтому о нем поговорим чуть позже. А сначала остановимся на «родном» методе синхронизации MIDI-устройств, который называется MIDI Clock и является неотъемлемой частью протокола.
MIDI Clock
MIDI Clock предназначен для синхронизации тех устройств, внутренняя временная сетка которых выражена в относительных единицах, зависящих от темпа. Типичные варианты: секвенсор и ритм-машинка, два секвенсора, две ритм-машинки. Для синхронизации одно из устройств делается мастером (у него включается функция передачи сообщений MIDI Clock), а другое — подчиненным (переводится в режим внешней синхронизации, который может иметь название «Sync: External Clock», «Sync: MIDI», «Clock: External» и т. п.). В принципе, ведомых устройств может быть несколько.
При этом не требуются специальные разъемы и кабели — сообщения MIDI Clock передаются по обычному MIDI-кабелю и разъему. Причем их вполне можно передавать и одновременно с аранжировкой. Здесь прослеживается аналогия с цифровой звуковой коммутацией, когда синхросигнал внедряется в звуковые данные (self-clock). С инженерной точки зрения это нехорошо, поскольку пропускная способность MIDI и без того ограничена. Но для пользователя удобно — не нужно лишней коммутации и обязательного наличия свободного MIDI-входа (рис. 2).
Для синхронизации по MIDI Clock применяются пять сообщений: позиционное (Song Position Pointer), информация о скорости (Timing Clock) и три команды (Start, Stop, Continue). Позиционное сообщение относится к категории System Common, информация о скорости и команды — к категории Real Time.
Основное сообщение здесь — Timing Clock. Оно состоит только из статус-байта (0xF8) и посылается мастер-устройством 24 раза за четверть. Если, например, текущий темп равен 120 bpm (ударам в минуту), то генерируются 48 сообщений Timing Clock в секунду (120 / 60 * 24), если 180 bpm — 72 сообщения. Поскольку Timing Clock никакой числовой информации не несет, то для определения темпа приемное устройство должно получить как минимум два «клока» и измерить временной интервал между ними.
Известно, что разрешение секвенсоров гораздо больше, чем 24 импульса в четверти (у современных программных секвенсоров оно доходит до 15360 PPQN — Pulse Per Quarter Note). При передаче клока ведомому устройству секвенсор вынужден отбрасывать часть своих внутренних импульсов высокого разрешения. Приемное устройство также может иметь более высокое разрешение, и должно будет добавлять внутренние импульсы между приходящими клоками. Возможна ситуация, когда в мастер-устройстве произойдет плавное изменение темпа в промежутке между MIDI-клоками. Точно его передать на ведомое устройство не получится — в ведомом произойдет скачок темпа (рис. 3). Обычно это не представляет особой проблемы, но лучше такое ограничение иметь в виду.
Сообщения Timing Clock, как и все сообщения группы Real Time, могут вклиниваться между частями других сообщений, если подошло время отправки. Типичный пример представлен на рис. 4. Здесь первый клок внедрился между статус-байтом сообщения Note On и байтом данных, а следующий — между байтами данных сообщения Pitch Wheel Change. Устройство должно обрабатывать эту ситуацию без проблем. В данном случае после получения статус-байта «нажата клавиша» тон-генератор ждет два байта данных, первый — с номером ноты, второй — со скоростью нажатия (см. предыдущую статью). Но вместо этого он натыкается на статус-байт клока. Этот байт извлекается из потока, обрабатывается, а затем устройство продолжает ожидать два байта данных сообщения Note On, как ни в чем не бывало.
Спецификация предлагает еще один способ передачи информации о скорости — так называемые «тики» (Timing Tick). Один тик — это статус-байт 0xF9, который передается от мастера к ведомому устройству каждые 10 мс (то есть 100 раз в секунду). Скорость этого потока не зависит от темпа, но, с другой стороны, и не содержит абсолютного времени, как, например, в MTC. Ведомое устройство должно самостоятельно определить, сколько тиков приходится на четверть, базируясь на своих внутренних часах.
Теперь поговорим об управлении. При нажатии кнопки Play на мастере ведомому устройству посылается команда Start(статус-байт 0xFA), которая переводит его в режим готовности к воспроизведению. Одновременно эта команда выполняет простейшую позиционную функцию — она указывает, что воспроизведение должно начаться с самого начала песни. Затем, как только поступит первый клок, ведомое устройство должно начать воспроизведение. Спецификация не определяет паузу между поступлением сообщений Start и следующего за ним Timing Clock. Теоретически, клок может прийти немедленно. Но на практике большинство мастер-устройств выдерживают паузу в 1 мс для того, чтобы приемник мог подготовиться к воспроизведению.
Замечу, что требование ожидать первый клок действует только в том случае, если устройство находится в режиме внешней синхронизации, то есть является ведомым. Если устройство работает от внутренних часов, то оно может стартовать при получении сообщения Start немедленно, что удобно для простого дистанционного управления.
Команда Stop (статус-байт 0xFC) останавливает воспроизведение. Спецификация требует, чтобы сигналы MIDI Clock продолжали поступать и после остановки, что дает возможность ведомому устройству постоянно отслеживать текущий темп (например, для отображения его на передней панели).
Сообщения Timing Clock несут информацию только о скорости и ничего не говорят о положении. Команда Start немногим улучшает дело — она говорит лишь о том, что воспроизведение нужно всегда начинать с первой доли первого такта. А если нужно начать воспроизведение с произвольного места? Для этого применяется сообщениеSong Position Pointer (SPP, статус-байт 0xF2), в котором посылается число MIDI-битов (MIDI Beat), прошедших от начала песни. Один MIDI-бит равен шести клокам, а, следовательно, шестнадцатой ноте (24 / 4). То есть SPP имеет точность позиционирования до шестнадцатой. Если, к примеру, SPP равен 48, то это значит, что воспроизведение начнется с 48-й по счету шестнадцатой, то есть с первой четверти третьего такта (при размере 4/4). Сообщение SPP имеет высокое разрешение, содержит два байта данных (пара MSB:LSB), следовательно, позволяет указать позицию от 0 до 16383 MIDI-битов, что при размере 4/4 соответствует 1024 тактам от начала песни.
Сообщение SPP не должно передаваться во время воспроизведения. В противном случае ведомое устройство может не успеть вовремя переместиться к новой точке и потеряет при этом несколько сообщений Timing Clock. Обычно SPP передается при перемотке вперед или назад в секвенсоре при остановленном воспроизведении.
Для того, чтобы ведомое устройство стартовало с точки, заданной сообщением SPP, либо от последней точки остановки, применяется команда Continue (статус-байт 0xFB). При ее получении устройство приводится в режим готовности, а следующее сообщение Timing Clock служит сигналом начать воспроизведение. Команда Start для этих целей не подходит, поскольку она требует всегда начинать воспроизведение с начала песни.
Существует также возможность выбора песни (или паттерна) посредством MIDI. Для этого применяется сообщение Song Select (категория System Common, статус-байт 0xF3). Оно содержит один байт данных — номер песни (от 0 до 127). Вы можете, например, запрограммировать в секвенсоре и в ритм-машинке несколько песен. Если секвенсор является мастером, то при выборе одной из них секвенсор посылает ритм-машинке сообщение Song Select — и она готова к воспроизведению песни с тем же номером. При получении Song Select ведомое устройство устанавливает позицию воспроизведения в начало песни. Для выбора другой позиции мастер-устройство, естественно, должно передать SPP.
MIDI Clock можно использовать и для переписывания данных из одного секвенсора в другой по кабелю, хотя существуют и более удобные способы (стандартные MIDI-файлы или протокол передачи MIDI File Dump, о котором поговорим отдельно). Однако в том случае, если одно из устройств не может читать или записывать на носитель, или не понимает протокола MIDI File Dump, запись по кабелю в реальном времени — единственный способ переноса данных. Коммутация здесь происходит обычным образом, как и при синхронизации секвенсора с ритм-машинкой (рис. 2). Секвенсор, с которого нужно переписать данные, делается мастером, секвенсор назначения — ведомым. При этом, для экономии времени, можно переписывать на повышенной скорости, выставив на мастере более высокий темп, а после записи вернув его в норму. Подробностей этого процесса я коснусь в статье про секвенсоры. |
System Exclusive
Существует множество самых разных музыкальных устройств, отличающихся назначением и внутренней архитектурой. Учесть особенность каждого инструмента и внести их в стандарт — задача нереальная, но MIDI к этому и не стремится. Стандартизированы (в виде сообщений канала) только наиболее характерные черты большинства устройств. Необходимая гибкость в управлении достигается с помощью контроллеров General Purpose или незарегистрированных параметров (NRPN, см. предыдущую статью). А наиболее удобным вариантом, позволяющим использовать все заложенные в устройство возможности, являются системные эксклюзивные сообщения (SysEx). Каждый производитель может определять свои собственные сообщения SysEx, даже под конкретное устройство.
Изначально сообщения SysEx предназначались исключительно для производителей, но скоро обнаружилось, что есть целая группа команд, которые используются одинаковым образом и которые неплохо бы внести в стандарт. Типичным примером является общая громкость звучания (Master Volume) и панорама (Master Pan). Кроме того, возникла потребность расширения начальной спецификации дополнительными протоколами (первое такое расширение, MIDI Time Code, появилось в 1987 году). Но практически все статус-байты на тот момент были заняты, поэтому единственным способом расширения оказались сообщения SysEx.
Таким образом, эксклюзивные сообщения были разделены на два типа: предназначенные для производителей (Manufacturer Specific SysEx) и универсальные (Universal SysEx). В последнюю группу вошли все расширения протокола, а также общие команды для управления устройствами, не отраженные в голосовых сообщениях.
Для того, чтобы сопоставить SysEx с конкретным производителем, в заголовке сообщения передается идентификатор производителя (Manufacturer ID). Получив чужой идентификатор, устройство обычно пропускает все сообщение, так как просто не понимает его формат. Выдачей идентификаторов занимаются организации MMA и JMSC.
Общая структура сообщения SysEx такова: сначала идет статус-байт 0xF0, затем идентификатор производителя, затем какое-то количество байт данных, и признак завершения — байт EOX (End Of Exclusive, 0xF7), рис. 5. Каждый производитель применяет собственный формат и волен использовать в сообщении любое число байт данных. В принципе, устройство, для которого предназначено сообщение SysEx, само знает, сколько байт данных содержится в том или ином сообщении. Поэтому EOX нужен, в основном, для тех устройств, которые получили порцию SysEx, им не предназначенную; количество байт данных им неизвестно, поэтому они и ориентируются по ограничивающему байту EOX.
С другой стороны, сообщение SysEx содержит только байты данных (не считая начального 0xF0), поэтому появление какого-либо статус-байта (отличного от категории Real Time) будет также означать конец SysEx. Так что, строго говоря, завершающий байт EOX не обязателен. Такой подход иногда встречаются в продукции некоторых фирм. Например, инструмент Yamaha DX 7 не передает EOX, поэтому с теми устройствами, которые ожидают его в обязательном порядке, могут возникнуть проблемы.
Идентификаторы производителей находятся в диапазоне от 0x01 до 0x7C (от 1 до 124), по 31 идентификатору на регион мира: с 0x01 по 0x1F — для американских производителей, с 0x20 по 0x3F — для европейских, с 0x40 по 0x5F — для японских и с 0x60 по 0x7C — для производителей из остальных регионов. Оставшиеся три значения (0x7D, 0x7E и 0x7F) зарезервированы: 0x7D является некоммерческим идентификатором (Non-Commercial ID), применяется при разработке и тестировании оборудования и не должен использоваться в устройствах, поставляемых на рынок. Группу универсальных сообщений SysEx поделили на две части: Universal Non-Real Time (сообщения, не критичные к времени передачи) и Universal Real Time (соответственно, критичные). Первой присвоили идентификатор 0x7E, второй — 0x7F.
Конечно, 31 производитель на регион — это несерьезно, и практически сразу все идентификаторы были заняты. Организации MMA и JMSC это предвидели и зарезервировали нулевой идентификатор (0x00) в качестве префикса, за которым передаются два байта, пара MSB:LSB, содержащие расширенный номер производителя, от 1 до 16383 (первым передается LSB). Сказанное иллюстрирует рисунок 6.
В таблице 1 приведены идентификаторы по состоянию на сегодняшний день. Политика MMA и JMSC такова: выделенные однажды идентификаторы остаются за производителем навсегда, даже если он прекращает торговую деятельность или ликвидируется. Что вполне логично, поскольку выпущенные приборы могут быть «в ходу» неограниченное время. В таблице несуществующие сегодня производители отмечены звездочкой. Таблица 1
|
Европа
ID (Hex) | Производитель |
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 33 34 35 39 3B 3C 3D 3E 3F 00 20 00 00 20 01 00 20 02 00 20 04 00 20 06 00 20 07 00 20 09 00 20 0A 00 20 0B 00 20 0C 00 20 0D 00 20 0E 00 20 0F 00 20 10 00 20 11 00 20 13 00 20 15 00 20 16 00 20 17 00 20 18 00 20 1F 00 20 2B 00 20 2C 00 20 2D 00 20 2E 00 20 2F 00 20 30 00 20 31 00 20 32 00 20 33 00 20 34 00 20 35 00 20 36 00 20 37 00 20 38 00 20 39 00 20 3A 00 20 3B 00 20 3C 00 20 3D 00 20 3E 00 20 3F 00 20 40 00 20 41 00 20 42 00 20 43 00 20 44 00 20 45 00 20 46 00 20 47 00 20 48 00 20 49 00 20 4A 00 20 4B 00 20 4C 00 20 4D 00 20 4E 00 20 4F 00 20 50 00 20 51 00 20 52 00 20 53 00 20 54 00 20 55 | Passac SIEL Synthaxe* Stepp* Hohner Twister* Solton Jellinghaus* Southworth PPG* JEN Solid State Logic Audio Veritrieb Hinton Instruments Soundtracs Elka Dynacord Clavia Digital Instruments Audio Architecture* General Music Soundcraft Electronics Wersi Avab Electronic Digigram Waldorf Electronics Quasimidi Dream Strand Lighting AMEK Systems & Controls Dr. Bohm/Musical International Trident Real World Design* Yes Technology Audiomatica Bontempi/Farfisa F.B.T. Electronica MIDITEMP Larking Audio Zero 88 Lighting Micon Audio Electronics Forefront Technology Kenton Electronics ADB Jim Marshall Products DDA BSS Audio TC Electronic Medeli Electronics Co Charlie Lab SRL Blue Chip Music Technology BEE OH LG Semiconductor TESI Emagic Behringer Access Synoptic Hanmesoft Terratec Electronics Proel SpA IBK MIDI IRCAM Propellerhead Software Red Sound Systems Ltd Elektron ESI AB Sintefex Audio MAM (Music and More) Amsaro CDS Advanced Technology BV Touched By Sound DSP Arts Phil Rees Music Tech Stamer Musikanlagen Soundart (Musical Muntaner) C-Mexx Software Klavis Technologies Noteheads AB Algorithmix Skrydstrup R&D Professional Audio Company DBTECH Vermona Nokia Wave Idea Hartmann Lion’s Tracs Analogue Systems Focal-JMlab Ringway Electronics (Chang-Zhou) Co Ltd Digiplug |
Япония
ID (Hex) | Производитель |
40 41 42 43 44 46 47 48 4B 4C 4D 4E 50 51 52 54 55 56 57 59 5A 5C 5F 00 40 00 | Kawai Roland Korg Yamaha Casio Kamiya Akai Japan Victor Fujitsu Sony Nishin Onpa TEAC Matsushita Electric Fostex Zoom Matsushita Communication Industrial Suzuki Musical Instrument Fuji Sound Corp. Acoustic Technical Laboratory Faith Internet Corp. Seekers Co Ltd SD Card Association Crimson Technology |