Поиск по этому блогу

вторник, 15 ноября 2011 г.

MIDI


Всем привет с вами снова Ivn_Os (DJ Power Button). Информация представленная ниже является, своего рода, компиляцией знаний об интерфейсе MIDI, накопленных мной за период с 2004 года по настоящее время. Некоторые нюансы я вычеркнул, потому как не желаю грузить вас огромными, и по большей части не нужными на практике, текстами. Надеюсь, получилось достаточно интересное и полезное чтиво не только для новичков, но и продвинутых юзверей. На этом, пожалуй, закончу жевать резину и начну свое повествование.



Определение MIDI

Не знаю, зачем я это пишу, когда есть Гугл?
MIDI – Musical Instrument Digital Interface, что в переводе на наш родной язык являет собой «Цифровой Интерфейс Музыкальных Инструментов» (перевод дословный, но суть, думаю, уловить можно).

Как вы понимаете, исходя из рассшифровки аббревеатуры, протокол MIDI служит для передачи различных команд (в MIDI пространстве они называются, сообщения (Messages)) от контроллеров к звуковым модулям (виртуальным или железным синтезаторам) или секвенсорам на базе компьютера. Данные команды содержат различную музыкальную (по большей части) информацию, начиная от номера сыгранной ноты и заканчивая Program Change сообщениями (все это мы рассмотрим далее).


USB или 5- PIN?

USB 
5-PIN

Думаю, многие из вас уже давно знают о том что в современном мире используется два типа соединения для передачи MIDI информации, посредством USB и посредством класического 5pin MIDI кабеля. Но, рискну предположить, не многие из вас знают почему 5 «пиновый» старичек все еще не сдал позиции. Поэтому, ниже представлена сравнительная таблица по которой я думаю вы сами сможете сделать выводы.


USB
Классика (5pin)
Подключение к компьютеру
- Даже с учетом Plug’n’Play некоторые контроллеры нуждаются в драйверах.

- Сигнал передается по стандартному протоколу, универсальному для всех девайсов использующих MIDI.
Подключение контроллера к старому синтезатору
- Достаточно проблематично, по элементарной причине отсутствия каких-либо переходников c USB на MIDI (именно USB – MIDI, а не наоборот). В итоге реализуется цепочкой «контроллер – компьютер – MIDI интерфейс - синтезатор».
- Без комментариев
Количество шнуров, стоимость и доступность коммутации
- Кабель достаточно дешевый

- Купить можно в любом компьютерном магазине

-Кабель является двунаправленным, т.е. IN и OUT сообщения передаюся по одному шнуру

- Для многих контроллеров заменяет блоки питания

- Кабель стоит сравнительно дороже USB

 - Достается только в специализированных магазинах

- Для каждого канала входа-выхода требуется отдельный кабель

- Всегда требуется блок питания
Скорость передачи данных
- Скорость передачи данных по USB значительно выше скорости классического кабеля
Максимальная длина кабеля

- Без использования хаба составляет около 3.5 метров
- Около 12 метров
MIDI THRU
- Достаточно сложно реализуется посредством компьютера и MIDI интерфейса
- Посредством THRU


IN, OUT, THRU

Ну и раз уж мы затронули тему кабелей и разъемов, то будет просто кощунством пройти мимо троицы MIDI-портов.

Думаю, рассказывать про IN и OUT порты не имеет особого смысла если вы в хороших отношениях с английским языком. (IN – вход, OUT – выход) Поэтому лучше расскажу вам о порте под названием THRU.

THRU порт являет собой выходной порт, но в отличии от OUT порта он передает сигнал поступающий в IN порт, т.е. из OUT порта выходит сигнал только данного контроллера а через THRU проходит сквозной вошедший через IN порт.

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

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

А если мы не хотим одновременно играть на всех синтезаторах, а использовать каждый из них только в нужный нам момент, то для таких ситуаций существуют каналы.


Каналы

Кстати, не только таких ситуаций. Думаю в нашем случае будет гораздо актуальнее ситуация когда мы не хотим создавать несколько однотипных дорожек с каким-нибудь Kontakt’ом в нашем секвенсоре и перегружать процессор.
Установка каналов производится элементарно. Сначала мы устанавливаем на каждом звуковом модуле номер принимающего канала, после чего попеременно перебирая каналы брякая по клавишам на нашем контроллере можно убедиться, что на каждом отдельном канале у нас висит отдельный звуковой модуль (или несколько).
 
Данная фишка очень полезна при живом выступлении, когда на различные треки у нас задействованны различные блоки эффектов и инструментов. Так же очень удобно использовать такой способ при записи треков (избавление от лишних тырканий мышью), зарядив все дорожки на запись и переключаясь между синтезаторами с помощью каналов.

Не знаю стоило ли, но я решил привести для вас примеры мульти-инструментального использования каналов: 
  •  Деление клавиатуры на несколько зон. Напрмер левую половину клавиатуры мы вешаем на первый канал и вешаем на первый канал патч в Kontakt’е который хотим назначить на нижние октавы, ну а правую часть делим идентично, но уже используем второй канал и второй патч для контакта.
  •  Наложение нескольких каналов слоями. Т.е. имея два звуковых модуля висящих на разных каналах (например 1 и2) мы можем использовать оба инструмента играя на двух каналах одновременно.
К сожалению, в своем большинстве, не все контроллеры поддерживают возможность такого рода деления, и чаще приходится придумывать более изворотливые варианты ограничивая зоны в софте или на звуковых модулях.

Чуть не забыл сказать об азах. Максимальное число каналов ограничено 16-ю и по каждому из них передается 7 типов MIDI сообщений, которые мы рассмотрим ниже. Но прежде чем приступить к рассмотрению канальных сообщений, нам осталось рассмотреть еще пару элементов, относящихся к каналам: OMNI и понятие мультитембральности.

  • Термин мультитембральности являет из себя не что иное, как возможность использования нескольких каналов на базе одного VST плагина (зачастую это сэмплеры и ромплеры) или железного синтезатора (рабочей станции), и в дальнейшх комментариях, думаю не нуждается.

  • OMNI в большинстве программ, представляет из себя не что иное как канал под названием ALL. И как не трудно догадаться из названия в таком состоянии дорожка или звуковой модуль, будут принимать сообщения с любого канала. Так же есть некоторые «железки» на которых отсутствует переключатель режима OMNI, что говорит нам о том, что мы не можем переключать их в режим получения сообщений с любого канала. Самый элементарный пример использования OMNI, это использование звукового модуля в связке со всеми девайсами висящими на отдельных каналах. Так же с его помощью можно проверять работоспособность выходных каналов, а так же правильность их назначения (если хотите знать как, то включайте соображалку).

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


    Сообщения

    Всего существует 7 типов сообщений (Note on/off, CC, Pitch Bend, Aftertouch mono/poly, Program Change). В програмных секвенсорах сообщения генерируемые секвенсором именуются Events, но по сути кроме названия это ничего не меняет. Ниже мы более-менее подробно рассмотрим каждый тип сообщений, а так же почему одни из них несут 2 байта информации, в то время как другие 1 (на самом деле несут они 3 и 2 соответственно, но лишний байт мы вычтем, по той простой причине, что первый байт несет информацию о канале и типе сообщения.)

    Note on/off
    Note on сообщения используют 2 байта информации. Первый из них отдается номеру нажатой ноты (0-127). Кстати, (пригодится при програмированиии патчей,например, в NI Reaktor) ноте C-2, например, соотоветствует №0 и с повшением на каждый полутон, номер ноты, соответственно, так же повышается на единицу, и доходит до G8 (№127). На обычной 88 клавишной клавиатуре отсчет начинается с ноты A-1 (№24) и заканчивается C7 (№108). Так... Что-то меня занесло...

    Второй байт передает информацию о громкости (Velocity) нажатой ноты (1-127). Ну а громкость, думаю, не нуждается в особых пояснениях. Чем сильнее ударяем по клавише или пэду, тем больше громкость.

    Note off делятся на три маленькие подгруппы, которые по своей сути выполняют идентичные функции, отличающиеся лишь способом реализации и некоторыми нюансами.
    • Первый тип наименее распространен. Представляет из себя 2 байта, несущие информацию о номере ноты и громкости релиза (Release Velocity) (0-127).
    Громкость релиза – представляет из себя сигнал реагирующий на то, с какой скоростью происходит отпускание клавиши, зачастую отвечает за контроль релиза на синтезаторе или сэмплере.
    • Второй тип является более дешевой реализацией первого варианта, за счет того, что на втором байте всегда висит параметр равный 64.

    • Третьи являют собой Note on сообщения с номером ноты и громкостью (Velocity) равной 0, и являются наиболее распространенными.

      Отдельно стоит отметить контроллеры для партии ударных, в которых вместо громкости релиза используется понятие времени задержки (Gate Time) или другими словами длина ноты (Note Length), и как можно понять из названия, с помощью данного параметра мы своеобразно воссоздаем палец отпускающий клавишу на клавиатуре.


      Aftertouch mono/poly
      Думаю, все знают что Aftertouch переводится как послекасание, и представляет из себя сообщение снятое с помощью сенсора силы нажатия расположенного под клавишей. Если ваш сэмплер/синтезатор не реагирует на Aftertouch сообщения, то либо он их просто не поддерживает, либо ваш контроллер их не поддерживает, либо нужно произвести привязку параметра к сообщению.

      Mono и Poly реализации Aftertouch’а являют собой, своего рода, две противоборствующие стороны, и не могут уживаться под крышей одного контроллера. Их конфликт заключается в том, что пока мы играем одну ноту мы, даже если захотим, не сможем различить какой вид Aftertouch'а задействован, но стоит зайти речи об аккорде как тут же вспыхивает пламя вражды. И пока один говорит об экономии и о простоте гениального, второй ему противопоставляет свободу выбора и индивидуальность.

      Мono реализация сенсора Aftertouch является бюджетной, т.е. используется один сенсор на все клавиши, и следовательно сигнал Aftertouch генерируется той нотой аккорда, которая сильнее всего нажата. В то время как на контроллере с Poly Aftertouch’ем используются индивидуальные сенсоры для каждой ноты, и следовательно Aftertouch сообщения обрабатываются индивидуально для каждой ноты. Понятное дело, из-за своей простоты и дешевизны Mono вариант наиболее распространен.

      Mono состоит из одного байта – силы нажатия (Pressure) (0-127), в то время как Poly к байту силы нажатия (Pressure) добавляет байт с номером ноты (0-127).

      Pitch Bend
      Не сомневаюсь в том, что данное колесо знакомо многим. Служит оно, как многие знают, для плавного изменения высоты тона звучащей ноты. Реализуется за счет выставления диапазона (количества полутонов на которое происходит сдвиг при крайнем положении колеса) в сэмплере или синтезаторе. В секвенсорах, зачастую, отображается в виде диапазона от -64 до +63, где центру соответствует 0.

      Сообщение состоит из 2 байт. Первый байт называется MSB (Most Significant Byte) (0-127) и передает информацию о положении колеса, от нижнего (0) до крайнего верхнего (127). Второй же байт имеет название LSB (Least Significant Byte) и передает информацию о значении Pitch Bend’а в промежутке между каждым значением MSB (0 – 127). Хорошим примером будет являтся линейка со шкалой в миллиметрах и сантиметрах, где миллиметрам будет соответствовать LSB, а сантиметрам MSB. В результате такого задействования каждого байта мы имеем громаднейший диапазон (около 16к) значений, позволяющий совершать слайды намного мягче.

      Control Change (CC)
      Данный тип сообщений используется для передачи информации об изменении положения или движении какого либо параметра в синтезаторе/сэмплере, что, в свою очередь, открывает огромный простор для осуществления контроля.

      Каждое сообщение состоит из 2 байт информации. Первый отвечает за порядковый номер сообщения (0-127), т.е. физически мы можем произвести до 128 назначений. Так же некоторые параметры навешиваются на определенные порядковые номера по умолчанию (например колесо модуляции которому соответствует CC1), но ничто нам не мешает изменять их.

      Второму же байту соответствует значение назначенного параметра (0-127). На «железе» данный байт представляется в двух вариантах, кнопки, имеющей два варианта значений (0 и 127), и контроллера с диапазоном значений (зачастую реализуется в виде фэйдера или энкодера).

      Кстати, энкодеры, в свою очередь, делятся на два типа, с бесконечным вращением и конечным. Отличие лучше всего продемонстрировать на примере:









       
      В данном случае использован энкодер с конечным вращением, с изначальным значением равным 80, в то время как значение в секвенсоре соответствовало 100. Типичный пример такой ситуации когда мы совершили дополнителное редактирование мышью, при этом не меняя положение энкодера и начали производить запись автоматизации.

      Ниже представлена та же ситуация, с использованием энкодера бесконечного вращения.










      Но тем кто использует энкодеры с конечным вращением не стоит огорчаться, потому как, например, в Live это компенсируется параметром Takeover Mode в режиме Pickup, т.е. изменение параметра будет происходить лишь в тех случаях, когда ваш энкодер достигает необходимого изначального положения и лишь потом происходит изменение параметра. Проще говоря автоматизация приобретает вид аналогичный той что используется при использовании бесконечных энкодеров, при небольшом "напряге" с дополнительным кручением энкодера до "подхвата".

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

      Данные сообщения состоят из 1 байта, который передает информацию о номере патча (0-127). На железках, номера патчей не всегда отображаются в формате 0 – 127. Так же присутствуют варианты +1 (при посыле сообщений 0 – 127, на железке мы увидим 1 – 128) и в форме банков (когда пресеты делятся на ветвистую стуктуру с банками, каждый из которых под собой имеет несколько пресетов).

      Если говорить на чистоту, то практического применения данных сообщений в софтовых вариантах я не нашел…


      Синхронизация
       
      Синхронизация предстает перед нами в двух ипостасях MTC и MIDI clock:

      • MIDI clock – осуществляется за счет передачи 24 сообщений за период звучания одной четвертной ноты. В связи с чем идеально подходит для работы с музыкальным материалом посредством контроллеров.
      • MTC (MIDI time code) – основана на SMPTE/EBU формате, т.е. является своеобразным мостом между устройствами, работающими с SMPTE, и MIDI-устройствами. По сути, MTC — это метод передачи SMPTE по протоколу MIDI.. Настривается, в виде установки идентичных параметров частоты кадра и относительного смещения. 

      Как показывает практика, многие не знают как настроить синхронизацию между контроллером и секвенсором. Между тем, настроенная синхронизация позволяет использовать некоторые контроллеры на все 100%, например арпеджиаторы контроллера, которые в данной ситуации будут привязаны к темпу проекта.

      Операция назначения происходит следующим образом:

      1. Назначаем Master (Master является источником сигнала синхронизации и может быть только один), т.е на синтезаторе (в секвенсоре) включаем передачу MIDI clock сообщений на нужном нам порте. В Ableton live это выглядит так


      В данном примере центральным переключателем мы включаем синхронизацию выходного MIDI порта звуковой карты. В графе MIDI clock type, выбираем тип синхронизации (Song или Pattern). Отличаются они лишь наличием SPP сообщений (положения указателя воспроизведения) у Song типа. Зачастую Song выбирают в связке с рабочими станциями, имеющими свой собственный секвенсор, Pattern же используется в остальных случаях т.е. при отсутствии приема SPP сообщений на контроллере.

      MME и Direct Music, ничем особо не отличаются. MME появился еще до Windows 95, DM чуть позже. На форумах Ableton много инфы о том, что для синхронизации USB контроллеров лучше ипользовать MME.

      2. На контроллере (синтезаторе) включаем прием сообщений, т.е назначаем Slave (Slave является приемником сигнала, управляемым за счет Master’а). Зачастую это осуществляется простой установкой параметра MIDI clock в состояние External (в редких случаях Receive).

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

      З.Ы. Не стесняемся писать комментарии (регистрация не требуется).
       

      9 комментариев:

      1. У меня контроллер AKAI LPD 8. 8 пэдов и 8 енкодеров. 4 пресета(на каждом пресете енкодеры могут посылать разные СС). При ручном маппинге в Ableton Live у меня (да и не только у меня) перестает работать Takeover Mode при переключениях пресетов контроллера. Приходится использовать только 8 енкодеров, хотя в принципе можно было бы юзать все 4*8. Возможно как-нибудь устранить подобную неудобность. Может я неправильно мапплю или в настройках абла не то выбираю?

        ОтветитьУдалить
      2. А если не Takeover mode юзать? Хотелось бы более подробной инфы о том как и в какой последовательности производится...
        Насколько я понял Ableton не реагирует на изменения параметров с использованием энкодеров на других пресетах, даже если энкодер повешен на однотипные CC?

        ОтветитьУдалить
      3. Вот суть тейковер мода на примере - я мапплю громкость первого трека на первый енкодер первого пресета. Громкость второго трека - на тот же енкодер второго пресета. Енкодеры посылают разные СС. Далее. Регулирую енкодером на первом пресете громкость первого трека. Далее переключаюсь на второй пресет. Хочу контролить етим же енкодером громкость второга трека, но как только я его покручу, то эта громкость прыгает к текущему значению енкодера, "захватывается" им ну и далее норм управляется. Но прыгать не должно. Принцип тейковер мода в том, что громкость должна "ждать" пока значение енкодера не дойдет до ее значения и уже потом захватиться. Вот мне интересно это у всех котроллеров такое или только у моего. В настройках миди - input(track, remote - on),output(track, remote - on)

        Подумывал контролить через maxforlive, но это геморно. А тут нашел Ваш сайт и мелькнула еще одна надежда. Скорее всего последняя

        ОтветитьУдалить
      4. Сам юзаю несколько продуктов от AKAI, но таких глюков не наблюдалось...

        А когда настройки слетают, то что высвечивается в Takeover mode? А при возврате на первый пресет все нормально работает?

        ОтветитьУдалить
      5. Так же вот здесь есть вариант с коргом, если юзаете скрипты
        http://forum.ableton.com/viewtopic.php?f=1&t=133147

        ОтветитьУдалить
      6. В тейковер мод не высвечивается. При любом последующем переключении пресетов тот же глюк. А насчет скриптов так они насколько я знаю нужны при автомаппинге

        ОтветитьУдалить
      7. Сложно сказать что конкретно происходит... В идеале использовать MIDI мониторинг и просматривать что вызывает глюк на уровне сообщений.

        ОтветитьУдалить
      8. Спасибо за мануал, ушло в закладки, буду сверяться по мере углубления в хардкор.
        Пеши есчо! )

        ОтветитьУдалить
      9. Всегда радуюсь полезности для кого-либо, своих материалов. ))

        ОтветитьУдалить