Меню

Синхронизация midi и программ



Синхронизация

Для того чтобы создавать любую музыку с помощью 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.

Читайте также:  Синхронизация mail for exchange
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) Производитель
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 00 00 01 00 00 07 00 00 08 00 00 09 00 00 0A 00 00 0B 00 00 0C 00 00 0D 00 00 0E 00 00 10 00 00 11 00 00 14 00 00 15 00 00 16 00 00 17 00 00 18 00 00 19 00 00 1A 00 00 1B 00 00 1C 00 00 1D 00 00 1E 00 00 1F 00 00 20 00 00 21 00 00 24 00 00 25 00 00 26 00 00 29 00 00 2A 00 00 2B 00 00 2D 00 00 2E 00 00 2F 00 00 30 00 00 31 00 00 32 00 00 33 00 00 34 00 00 35 00 00 37 00 00 38 00 00 39 00 00 3A 00 00 3C 00 00 3D 00 00 3E 00 00 3F 00 00 40 00 00 41 00 00 42 00 00 43 00 00 44 00 00 47 00 00 4E 00 00 4F 00 00 55 00 00 64 00 00 74 00 00 75 00 00 76 00 00 77 00 00 78 00 00 79 00 00 7A 00 00 7B 00 00 7C 00 00 7D 00 00 7E 00 00 7F 00 01 00 00 01 01 00 01 02 00 01 03 00 01 04 00 01 05 00 01 06 00 01 08 00 01 09 00 01 0A 00 01 0B 00 01 0C 00 01 0D 00 01 0E 00 01 0F 00 01 10 00 01 11 00 01 12 00 01 13 00 01 14 00 01 15 00 01 16 00 01 17 00 01 18 00 01 19 00 01 1A 00 01 1B 00 01 1C 00 01 1D 00 01 1E 00 01 1F 00 01 20 00 01 21 00 01 22 00 01 23 00 01 24 00 01 25 00 01 26 00 01 27 00 01 28 00 01 29 00 01 2A 00 01 2B 00 01 2C 00 01 2D 00 01 2E 00 01 2F 00 01 30 00 01 31 00 01 32 00 01 33 00 01 34 00 01 35 00 01 36 00 01 37 00 01 38 00 01 39 00 01 3A 00 01 3B 00 01 3C 00 01 3D 00 01 3E 00 01 3F 00 01 40 00 01 41 00 01 42 00 01 43 00 01 44 00 01 45 00 01 46 00 01 47 Sequential Circuits* IDP Voyetra/Octave Plateau Moog Music* Passport Designs Lexicon Kurzweil Fender Gulbransen AKG Acoustics Voyce Music Waveframe* ADA Garfield Electronics* Ensoniq Oberheim Apple Computer Gray Matter* Digidesign Palm Tree Instruments JL Cooper Lowrey Adams-Smith E-mu Systems Harmony Systems ART Baldwin Eventide Inventronics Key Concepts Clarity* Warner New Media Digital Music C7orp. IOTA Systems New England Digital* Artisyn IVL Technologies Southern Music Systems Lake Butler Sound Company Alesis DOD Electronics Studer-Editech Jeff Tripp/Perfect Fretworks KAT Opcode* Rane Corp. Spatial Sound/Anadi Inc. KMX Allen & Heath Brenell Peavey Electronics 360 Systems Spectrum Design and Development Marquis Musi Zeta Systems Axxes Orban KTI Breakaway Technologies CAE Rocktron Corp. PianoDisc Cannon Research Group Rogers Instrument Corp. Blue Sky Logic Encore Electronics Uptown Voce CTI Audio S&S Research Broderbund Software Allen Organ Co. Music Quest Aphex Gallien Krueger IBM Hotz Instruments Technologies ETA Lighting NSI Corp. Ad Lib Richmond Sound Design Microsoft The Software Toolworks RJMG/Niche Intone GT Electronics/Groove Tubes Euphonix InterMIDI Lone Wolf* Musonix Ta Horng Musical Instrument eTek Labs (Forte Tech) Electrovoice Midisoft Q-Sound Labs Westrex Nvidia ESS Technology MediaTrix Peripherals Brooktree Corp. Otari Corp. Key Electronics Shure Inc. AuraSound Crystal Semiconductor Conexant (Rockwell) Silicon Graphics Midiman PreSonus Topaz Enterprises Cast Lighting Microsoft Consumer Division Sonic Foundry Line 6 (Fast Forward) Beatnik Inc. Van Koevering Company Altech Systems S&S Research VLSI Technology Chromatic Research Sapphire IDRC Justonic Tuning TorComp Research Newtek Inc. Sound Sculpture Walker Technical Digital Harmony (PAVO) InVision Interactive T-Square Design Nemesys Music Technology DBX Professional Syndyne Corp. Bitheadz Cakewalk Music Software Staccato Systems National Semiconductor Boom Theory/Adinolfi Alternative Percussion Virtual DSP Corp. Antares Systems Angel Software St Louis Music Lyrrus dba G-VOX Ashley Audio Inc. Vary-Lite Inc. Summit Audio Inc. Aureal Semiconductor SeaSound LLC U.S.Robotics Aurisis Research Nearfield Multimedia FM7 Inc Swivel Systems Hyperactive Audio Systems MidiLite (Castle Studios Productions) Radikal Technologies Roger Linn Design Helicon Vocal Technologies Event Electronics Sonic Network Inc. Realtime Music Solutions Apogee Digital Classical Organs Inc. Microtools Inc. Numark Industries Frontier Design Group LLC Recordare LLC Starr Labs Voyager Sound Inc. Manifold Labs Aviom Inc Mixmeister Technology Notation Software

Европа

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

Естественно, идентификатор с номером 1 имеет Sequential Circuits как один из основных разработчиков MIDI. Интересно, что такой же номер, но в трехбайтовом виде (0x00, 0x00, 0x01) имеет фирма Warner New Media, то есть однобайтовые и трехбайтовые идентификаторы не перекрываются. Еще один интересный пример совпадения — Roland (0x41) и Microsoft (0x00, 0x00, 0x41).

Эксклюзивные сообщения (как и все системные) посылаются без указания номера канала, и на них может реагировать каждое устройство MIDI-системы. При соединении устройств разных производителей и передаче специфических SysEx это не проблема — SysEx с чужим идентификатором будут игнорироваться. Другое дело — универсальные SysEx. На них реагируют все устройства, поэтому для передачи такого сообщения выборочно, одному устройству системы, нужны дополнительные меры.

Был введен так называемый номер устройства в системе (Device ID) — байт данных, следующий за идентификатором производителя. Каждому устройству можно назначить свой номер от 0 до 127 (обычно, покопавшись в настройках). Если в сообщении SysEx будет передан Device ID, не совпадающий с выбранным номером, устройство проигнорирует сообщение. Очень похоже на прием по одному MIDI-каналу, только каналов здесь целых 128. Для посылки широковещательных SysEx-сообщений (то есть предназначенных всем устройствам системы) используется Device ID с номером 127 (0x7F).

Есть три способа передачи сообщений SysEx. Первый — прямая передача, которая инициируется вручную на передающем устройстве. При этом достаточно односторонней связи, то есть соединения MIDI-выхода передатчика с MIDI-входом приемника. Для контроля успешного приема в конец сообщения может добавляться контрольная сумма, рассчитанная по определенному алгоритму на основании данных сообщения. Если приемное устройство знает этот алгоритм, оно всегда может проверить целостность посылки.

Второй способ состоит в том, что приемное устройство сначала посылает запрос передающему, а затем ожидает от него данные. При этом требуется взаимная коммутация устройств двумя MIDI-кабелями. Третий способ также основан на запросе к передающему устройству и также требует двусторонней связи. При этом данные разбиваются на небольшие пакеты, которые могут передаваться без подтверждения приема или с подтверждением. В последнем случае используется так называемый механизм «рукопожатий» (Handshaking). После получения каждого пакета приемник должен сообщить передатчику результат — успешно получен пакет или нет. В случае ошибки приема, передатчик посылает пакет заново.

SysEx производителей

Сообщения SysEx производителей можно разделить на две основные группы: большие блоки данных (Bulk Dump) и изменения настроек инструмента (Parameter Changes). Сообщения Bulk Dump применяются для сохранения (и последующего восстановления) настроек отдельного пэтча или целых банков, обновления операционной системы устройства и других задач, требующих большого объема передаваемой информации. Сообщения типа Parameter Changes используются для настройки параметров встроенных процессоров эффектов, фильтров, паттернов арпеджиатора и т. п. На некоторых инструментах Yamaha, например, посредством таких сообщений можно управлять даже выключением питания.

Сообщения SysEx, как и все остальные, можно записывать в секвенсор. Проще всего это делать в реальном времени с помощью органов управления инструмента. При воспроизведении данные SysEx будут переданы обратно в тон-генератор, и все нужные установки параметров окажутся загруженными автоматически.

Существует целый класс компьютерных программ, которые называются редакторами MIDI-устройств. Они позволяют выполнить настройку инструмента удобным и наглядным способом — с помощью нарисованных на экране кнопок, слайдеров и других органов управления, а затем передать всю эту информацию для записи в секвенсор. Для сохранения, архивирования и последующей загрузки настроек пэтчей и целых банков применяются программы-библиотекари, которые часто выполняют и функции редакторов устройств.

Производителям рекомендовано публиковать формат своих сообщений SysEx, чтобы пользователи могли получить наибольшую отдачу от инструмента. Обычно формат прилагается к руководству пользователя. Другим производителям разрешается свободно его использовать, но только производитель-автор формата может вносить в него какие-либо изменения.

Обычно сообщение состоит из заголовка, команды, числа передаваемых байт, собственно данных и байта завершения EOX (рис. 7). Заголовок состоит из статус-байта 0xF0, идентификатора производителя и номера устройства в системе (Device ID). Многие производители используют также номер модели (Model ID) — ведь зачастую сообщение SysEx имеет смысл только для какого-либо конкретного прибора. Так, например, для звукового модуля Roland JV 1080 этот номер равен 0x6A. Если сообщение с таким номером поступит в другое устройство фирмы Roland (например, в автономную систему записи VS 2480), то оно будет проигнорировано.

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

Ничего более конкретного сказать нельзя — сколько моделей, столько форматов. В качестве примера приведу команду копирования паттерна арпеджиатора из постоянной в перезаписываемую память в звуковом модуле Emu Proteus 2000 — рис. 8.

Универсальные SysEx

Структура универсальных сообщений SysEx показана на рис. 9. После статус-байта 0xF0 следует тип сообщения (0x7E — Universal Non-Real Time, 0x7F — Universal Real Time), затем номер устройства в системе, затем — так называемый байт Sub ID. Он нужен для указания категории, к которой относится сообщение. Большинство категорий — это расширения протокола MIDI, например, Sub ID, равное 0x08 (в группе Universal Non-Real Time), является префиксом для команд протокола MIDI Tuning. Сами команды кодируются в следующем байте (он иногда называется Sub ID 2). Для протокола Sample Dump Standard (SDS) и общих сообщений «рукопожатий» (Generic Handshaking) сделано исключение — их команды кодируются непосредственно в первом Sub ID. После указания команды следуют сами данные, и, как обычно, сообщение завершается байтом EOX.

Расширения MIDI будут подробно рассмотрены в следующих статьях, а сейчас остановимся на универсальных категориях, к которым относятся Generic Handshaking, General Information и Device Control. Есть еще категория General MIDI, которая состоит из команд включения и выключения режима GM, но о ней поговорим в статье про совместимость.

Сообщения категории Generic Handshaking используются при пересылке данных между устройствами, и отражают состояние передачи. Например, при ошибке приемник говорит передатчику «последний пакет прошел неудачно, давай-ка его еще раз». Естественно, при этом требуется двухстороннее соединение устройств. Сообщения Generic Handshaking могут включаться в SysEx, специфичные для производителей, либо использоваться в форме универсальных SysEx. Структура последних показана на рис. 10. В таком виде «рукопожатия» используются в протоколе Sample Dump Standard и MIDI File Dump (последний позволяет передавать файлы любого формата по MIDI-кабелю).

Сообщение Ack (Acknowledged, Sub ID равен 0x7F) посылается после успешного приема каждого пакета и говорит передатчику — «последний пакет принят, можно передавать следующий». Номер полученного пакета указывается перед байтом EOX. Сообщение NAK (Not Acknowledged, 0x7E) означает ошибку приема и требует повторной пересылки пакета. Если приемник хочет, чтобы передатчик прекратил посылать пакеты, он отправляет ему сообщение Cancel (0x7D). Сообщение Wait(0x7C) говорит передатчику «сделай паузу». Приемник посылает это сообщение, если ему нужно выполнить длительную операцию, например, сохранить полученную порцию данных на дискету. Как только операция будет завершена, приемник посылает одно из трех предыдущих сообщений: для пересылки следующего пакета, для повтора последнего, либо для отмены передачи. После отправки последнего пакета передатчик посылает приемнику сообщение EOF (End Of File, 0x7B).

Категория General Information (иногда называемая Inquiry Messages) позволяет одному устройству (или программе) получить информацию о другом. Здесь прослеживается аналогия с принципом Plug’n’Play — интересующаяся сторона спрашивает: «Кто это к нам подключен?», устройство отвечает: «Я — такая-то модель такого-то производителя и т. п.». Команда опроса называется Identity Request (Sub ID 2 равен 0x01), команда ответа — Identity Reply (0x02). Пример команды опроса, которая посылается всем устройствам системы, показан на рис. 11.

Структура ответа показана на рис. 12. По байту Device ID можно определить, с какого устройства системы пришел ответ. В ответе содержится идентификатор производителя, номер модельного ряда (family code), номер модели, а также версия операционной системы.

В основном команды опроса посылают программные редакторы/библиотекари, чтобы определить, с каким устройством им предстоит работать.

Категория Device Control состоит из двух сообщений: Master Volume (Sub ID 2 равен 0x01) и Master Pan (0x02), оба появились в 1992 году. Предназначены они для управления громкостью и панорамой на мастер-выходе устройства, в отличие от сообщений MIDI Volume и Pan, которые применяются для настройки отдельного канала. Оба сообщения — высокой точности (содержат пару MSB:LSB). Пример использования Master Volume показан на рис. 13.

Running Status

Пропускная способность MIDI по современным меркам очень мала — 31,25 Кбит/с. И хотя она дает возможность передать более 1000 сообщений канала в секунду, для насыщенной аранжировки этого бывает недостаточно. Такие сообщения, как Pitch Wheel Change, послекасание, непрерывные контроллеры посылают информацию со скоростью от 50 до 100 сообщений в секунду. Если умножить это число на несколько одновременно звучащих каналов, да еще учесть возможное внедрение синхросигнала, то станет ясно, что превысить пропускную способность MIDI не составляет труда. Результатом перегрузки являются переполнение входных буферов, зависшие или «срезанные» ноты и прочие неприятности. Детали физического прохождения MIDI-потока по кабелю мы рассмотрим в следующих статьях, а сейчас поговорим о методе сжатия потока, который называется Running Status.

Суть его проста — если передается серия сообщений с одним и тем же статус-байтом, то достаточно передать только первый статус-байт, а остальные опустить. Проще всего показать это на примере. Если, скажем, передается сообщение о взятии ноты (предположим, на первом канале), то сначала к приемнику поступит статус-байт 0x90, а затем два байта данных: номер ноты и, соответственно, динамика. Затем приемник будет ожидать следующего сообщения, которое должно начаться со статус-байта. Если вместо него придет байт данных, то приемник поймет, что передача ведется в режиме Running Status и будет считать, что статус-байт все тот же, 0x90. Таким образом, неожиданно появившийся байт данных будет воспринят как номер ноты, а следующий за ним — как динамика. Пары байт «номер ноты/динамика» могут идти подряд до тех пор, пока тип сообщения не изменится. Для остальных сообщений принцип тот же.

Какова эффективность Running Status? Если взять аккорд из пяти нот, то будут сгенерированы пять последовательных сообщений Note On, а по отпускании клавиш — столько же сообщений Note Off. В обычном режиме будет передано 30 байт, а при использовании Running Status — 22, то есть сжатие составит около 30% (рис. 14).

Однако чаще при исполнении одни клавиши нажимаются, другие в это время удерживаются, и отпускаются потом в разное время, то есть сообщения Note On и Note Off перемешиваются друг с другом. В этом случае Running Status неэффективен, так как длинные серии одинаковых сообщений отсутствуют. Но разработчики нашли выход и ввели правило: вместо сообщения о снятии ноты можно передавать сообщение Note On с нулевой динамикой, которое должно отрабатываться устройством аналогично.

Предположим, мы взяли поочередно ноты До, Ми, Соль и Си первой октавы. В этом случае сообщения Note On и Note Off чередуются. Если инструмент будет передавать сообщение Note Off обычным способом, то пользы от Running Status не будет никакой — на выход пойдут 24 байта (рис. 15, а). Если же вместо Note Off передавать Note On с нулевой динамикой, то достаточно передать статус-байт Note On один раз в начале серии, в результате получим 17 байт (рис.15, б), то есть также около 30% сжатия.

Режим Running Status применяется только при передаче голосовых сообщений и сообщений режима канала. Он очень хорошо справляется с потоком сообщений непрерывных контроллеров, таких как колесо модуляции и послекасание, но практически неэффективен для чередующихся сообщений разного типа. Если сообщения одного типа чередуются по разным каналам, их статус-байты отличаются, а, следовательно, эффективность сжатия потока также уменьшается.

Общесистемные и эксклюзивные сообщения в режиме Running Status не передаются, поэтому при их появлении в потоке текущий Running Status сбрасывается. Сообщения категории Real Time, напротив, обрабатываются «прозрачно» и на Running Status не влияют.

Источник

Adblock
detector