- PVSM.RU - https://www.pvsm.ru -
MIDI (Musical Instrument Digital Interface) — это стандарт обмена данными между цифровыми музыкальными инструментам. Он позволяет обмениваться такой информацией, как номер ноты, скорость нажатия, таймкод и др. MIDI поддерживает большинство выпускаемых музыкальных девайсов, ислючения составляют многие модули модульных систем (например, Eurorack), а также такие специфичные вещи, как Monome.
Необходимость в таком стандарте возникла примерно к концу 70-х годов. В то время синтезаторы управлялись напряжением с помощью интерфейса CV/Gate. Существовало несколько его видов, однако, наибольшую популярность получил вариант, предложенный фирмой Roland: в нем при увеличении напряжения на 1 В, частота генерируемого тона увеличивалась на одну октаву. Главным недостатком такого интерфейса является то, что с помощью него можно управлять только одним голосом полифонии. Для извлечения дополнительной ноты нужно добавлять еще один интерфейс CV/Gate. Кроме того, таким способом передается только сам факт нажатия клавиши и ее высота, чего однозначно мало для выразительной игры.
Другим недостатком синтезаторов того времени была сложность настройки. Для каждого нового звука музыкантам приходилось настраивать инструмент заново, что было очень не удобно на живых выступлениях. На концертах тех времен часто можно было увидеть целые стеллажи из синтезаторов — так музыканты выходили из ситуации. Со временем в инструменты были встроены мини-компьютеры, с помощью которых можно было сохранять положения ручек в пресеты.
Однако, есть еще один момент, который оказал большое влияние на разработку MIDI.
Несомненно, у каждого синтезатора свой характер звучания, каждый из них был силен в определенных типах звуков. Поэтому многие музыканты того времени практиковали игру сразу на двух инструментах, как бы используя лучшее из разных моделей. Наслоение звуков из различных синтезаторов стало исполнительским приемом, визитной карточкой многих музыкантов. [1]
К началу 80-х большинство производителей осознали необходимость создания единого интерфейса. Задача стояла такая: разработать стандарт передачи действий исполнителя в цифровой форме между всеми типами электромузыкальных инструментов. [1]
Не будем детально углубляться в историю, (хотя она и очень интересна, о ней можно прочитать в [1]), приведем несколько основных дат:
MIDI — это протокол последовательной передачи данных между главным и подчиненным устройством. Главное устройство генерирует сообщения и отправляет их подчиненному устройству, который выполняет полученные команды. Последовательный — значит информация передается по одному биту, бит за битом. Отсюда следует невозможность передачи нескольких сообщений одновременно.
Сам протокол состоит из трех частей [1]: спецификация формата данных, аппаратная спецификация интерфейса и спецификация хранения данных. В данной статье будет идти речь только о первой части.
MIDI сообщения делятся на два типа: сообщения канала (channel messages) и системные сообщения (system messages). Первые управляют звукообразованием, а вторые выполняют служебные функции, например, синхронизаця.
Сообщение обычно состоит из двух или трех байт. Первый байт называется статус байтом. В нем задается тип сообщения и номер канала, к которому оно относится. Все последующие байты называются байтами данных. Статус-байт всегда начинается с единицы, а байт-данных с нуля — таким образом система их различает. Получается, что для MIDI информации остается только 7 бит, с помощью которых можно закодировать целые числа от 0 до 127, — вот откуда берется это «знаменитое» ограничение на количество нот и значения контроллеров.
Как видно из рисунка, информации о типе сообщений отводится всего 3 бита, в которых можно закодировать только 8 чисел. 7 из них отведены под наиболее часто используемые команды, а последнее используется для системных сообщений. Когда передается системное сообщение, последние 4 бита статус байта (в которых обычно передается номер канала) определяют тип системного сообщения.
Табл. 1. Сообщения канала.
Сообщение | Статус-байт | Байт данных 1 | Байт данных 2 |
Note Off | 1000nnnn | Номер ноты | Velocity |
Note On | 1001nnnn | Номер ноты | Velocity |
Polyphonic Key Pressue | 1010nnnn | Номер ноты | Давление |
Control Change | 1011nnnn | Номер контроллера | Значение |
Program Change | 1100nnnn | Номер программы | - |
Channel Pressure | 1101nnnn | Давление | - |
Pitch Wheel Change Change | 1110nnnn | Номер программы | - |
Системные сообщения | 1100nnnn | ... | ... |
Табл. 2. Системные сообщения
Сообщение | Статус-байт | Байт данных 1 | Байт данных 2 |
System Exclusive (SysEx) | |||
System Exclusive | 11110000 | ID | ... |
System Common | |||
MTC Quater Frame | 11110001 | Тайм-код | - |
Song Position Pointer | 11110010 | LSB | MSB |
Song Select | 11110011 | Номер песни | - |
Tune Request | 11110110 | - | - |
End Of Exclusive (EOX) | 11110111 | - | - |
Real Time | |||
Timing Clock | 11111000 (248) | - | - |
Start | 11111010 (250) | - | - |
Continue | 11111011 (251) | - | - |
Stop | 11111100 (248) | - | - |
Active Sensing | 11111110 | - | - |
System Reset | 11111111 | - | - |
MIDI разрабатывался, как доступный и практичный стандарт для передачи жестов исполнителя между любыми MIDI-устройствами [2]. Не в последнюю очредь благодаря своей легковесности он и получил такое распространение. Что ни говори, со своим предназначением он справляется прекрасно, и это подтверждается временем.
Итак, наверное, самый известный недостаток — ограничение значений контроллеров на 128 значений. Конечно, есть возможность передавать их с помощью двух байтов данных (что дает 16 384 возможных значений), но для этого надо передать три сообщения Control Change, что очень сильно загрузит протокол, так как данные по нему передаются со скоростью 31 250 бит/с. Это очень мало. Для сравнения, 12-нотный аккорд передастся примерно за 10 мс. И это без других сообщений, например Clock и CC. В реальном перфомансе, когда одновременно передается много различных параметров, могут возникнуть проблемы с синхронизацией.
«Open Sound Control — это новый, оптимизированный для современных сетевых технологий протокол для взаимодействия компьютеров, звуковых синтезаторов и других мультимедиа устройств» — так был представлен OSC на международной конференции по компьютерной музыке в 1997 году [3]. OSC не является протоколом в том виде, каким является MIDI, так как он не описывает требований к аппаратному обеспечиванию — спецификации описывают лишь формат передачи данных. В этом плане OSC больше схож с XML или JSON, нежели с MIDI [8].
Пока оставим технические подробности и начнем с самого начала, с истории.
Open Sound Control был создан в 1997 году Мэттью Райтом (Matthew Wright) и Эдрианом Фридом (Adrian Freed) в Университете Калифорнии в центре новой музыки и аудио технологий (CNMAT — Center of New Music and Audio Technologies). Разработчики хотели использовать высокоскоростные сетевые технологии в интерактивной компьютерной музыке [4]. OSC не важно, по какому протоколу передаваться, так как он представляет собой всего лишь формат данных (binary message format), хотя большинство реализаций используют TCP/IP или UDP. Другой причиной создания было то, что MIDI с его нотами, каналами и контроллерами логично не подходил к разрабатывающемуся в то время синтезатору CAST (CNMAT Additive Synthesis Tools), оно и понятно, ведь MIDI — это клавишно-ориентированный протокол, который разрабатывался для управления одним синтезатором с другого [1].
Слово «Open» в названии означает, что OSC не предопределяет, какие сообщения должны использоваться для определенных параметров — это решается разработчиком конкретного девайса. Кроме того, это слово имеет и другое значение: протокол открыт, его спецификации находятся на официальном сайте, где можно скачать исходники.
Небольшой (и не полный) список программ, использующих Open Sound Control:
Стоит отметить, что при использовании UDP, сообщения в пакетах не обязательно будут приходить в том порядке, в каком были переданы [6]. Допустим, одним пакетом были переданы сообщения:
/synth1/noteoff 54
/synth1/noteon 60
Фактически они могут прийти в обратном порядке:
/synth1/noteoff 60
/synth1/noteon 54
Это может привести к проблемам с управлением голосами в полифонии, например, в данном сообщении передается команда noteoff, которая выключает голос, а потом включает другую ноту. Если эти сообщения придут в обратном порядке, голос не освободиться и новая нота не сможет запуститься.
Чтобы этого избежать, надо передавать сообщения в разных пакетах, либо использовать TCP/IP, он отличается от UDP тем, что гарантирует корректную доставку пакетов, передавая каждый из них до тех пор, пока он не передастся в изначальном виде. Нужно иметь ввиду, что ценой такому удобству будут большие в сравнении с UDP задержки, поэтому использование TCP/IP должно быть обосновано.
Символы, которые можно использовать в адресной строке [7]:
дефис между двумя символами означает диапазон чисел в ASCII последовательности (дефис в конце строки не имеет специального значения);
восклицательный знак после первой квадратной скобки «переворачивает» действие символов: теперь они будут соответствовать всем символам, которых нет в строке (если этот знак поставить в любом другом месте, его специальное значение пропадет).
[1] Цикл статей о MIDI из журнала «Музыкальное оборудование» [1].
[2] T. Winkler "Composing interactive music [2]" — 2001 MIT Press.
[3] M. Wright, and A. Freed, 1997. "Open Sound Control: a new protocol for communicating with sound synthesizers. [3]" — ICMC 1997.
[4] M. Wright "Open Sound Control: an enabling technology for musical networking [4]". Organised Sound 10(3): 193–200 — 2005 Cambridge University Press.
[5] A. Schmeder, A. Freed, D. Wessel "Best Practices for Open Sound Control [5]" — Linux Audio Conference, 01/05/2010, Utrecht, NL, (2010).
[6] A. Fraietta "Open Sound Control: Constraints and Limitations [6]" — 2008 8th NIME conference.
[7] M. Wright "The Open Sound Control 1.0 Specification [7]" — 2002.
[8] A. Freed, A. Schmeder "Features and Future of Open Sound Control version 1.1 for NIME [8]" — 2009.
Автор: oscii
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/midi/2805
Ссылки в тексте:
[1] Цикл статей о MIDI из журнала «Музыкальное оборудование»: http://www.muzoborudovanie.ru/articles/midi/midi1.php
[2] Composing interactive music: http://www.amazon.com/Composing-Interactive-Music-Techniques-Ideas/dp/0262731398
[3] Open Sound Control: a new protocol for communicating with sound synthesizers.: http://cnmat.berkeley.edu/publication/open_sound_control_new_protocol_communicating_sound_synthesizers
[4] Open Sound Control: an enabling technology for musical networking: http://opensoundcontrol.org/publication/open-sound-control-enabling-technology-musical-networking
[5] Best Practices for Open Sound Control: http://opensoundcontrol.org/publication/best-practices-open-sound-control
[6] Open Sound Control: Constraints and Limitations: http://nime2008.casapaganini.org/documents/Proceedings/Papers/163.pdf
[7] The Open Sound Control 1.0 Specification: http://opensoundcontrol.org/spec-1_0
[8] Features and Future of Open Sound Control version 1.1 for NIME: http://cnmat.berkeley.edu/publication/features_and_future_open_sound_control_version_1_1_nime
Нажмите здесь для печати.