Что такое передача файлов midi

MIDI и OSC — основные протоколы взаимодействия музыкальных приложений

Часть 1. MIDI

1 Предпосылки

Необходимость в таком стандарте возникла примерно к концу 70-х годов. В то время синтезаторы управлялись напряжением с помощью интерфейса CV/Gate. Существовало несколько его видов, однако, наибольшую популярность получил вариант, предложенный фирмой Roland: в нем при увеличении напряжения на 1 В, частота генерируемого тона увеличивалась на одну октаву. Главным недостатком такого интерфейса является то, что с помощью него можно управлять только одним голосом полифонии. Для извлечения дополнительной ноты нужно добавлять еще один интерфейс CV/Gate. Кроме того, таким способом передается только сам факт нажатия клавиши и ее высота, чего однозначно мало для выразительной игры.

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

Несомненно, у каждого синтезатора свой характер звучания, каждый из них был силен в определенных типах звуков. Поэтому многие музыканты того времени практиковали игру сразу на двух инструментах, как бы используя лучшее из разных моделей. Наслоение звуков из различных синтезаторов стало исполнительским приемом, визитной карточкой многих музыкантов. [1]

2 История появления

К началу 80-х большинство производителей осознали необходимость создания единого интерфейса. Задача стояла такая: разработать стандарт передачи действий исполнителя в цифровой форме между всеми типами электромузыкальных инструментов. [1]

3 Основы

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

Сам протокол состоит из трех частей [1]: спецификация формата данных, аппаратная спецификация интерфейса и спецификация хранения данных. В данной статье будет идти речь только о первой части.

MIDI сообщения делятся на два типа: сообщения канала (channel messages) и системные сообщения (system messages). Первые управляют звукообразованием, а вторые выполняют служебные функции, например, синхронизация.

Что такое передача файлов midi. Смотреть фото Что такое передача файлов midi. Смотреть картинку Что такое передача файлов midi. Картинка про Что такое передача файлов midi. Фото Что такое передача файлов midi

Сообщение обычно состоит из двух или трех байт. Первый байт называется статус байтом. В нем задается тип сообщения и номер канала, к которому оно относится. Все последующие байты называются байтами данных. Статус-байт всегда начинается с единицы, а байт-данных с нуля — таким образом система их различает. Получается, что для MIDI информации остается только 7 бит, с помощью которых можно закодировать целые числа от 0 до 127, — вот откуда берется это «знаменитое» ограничение на количество нот и значения контроллеров.

Что такое передача файлов midi. Смотреть фото Что такое передача файлов midi. Смотреть картинку Что такое передача файлов midi. Картинка про Что такое передача файлов midi. Фото Что такое передача файлов midi

Как видно из рисунка, информации о типе сообщений отводится всего 3 бита, в которых можно закодировать только 8 чисел. 7 из них отведены под наиболее часто используемые команды, а последнее используется для системных сообщений. Когда передается системное сообщение, последние 4 бита статус байта (в которых обычно передается номер канала) определяют тип системного сообщения.

Табл. 1. Сообщения канала.

СообщениеСтатус-байтБайт данных 1Байт данных 2
Note Off1000nnnnНомер нотыVelocity
Note On1001nnnnНомер нотыVelocity
Polyphonic Key Pressue1010nnnnНомер нотыДавление
Control Change1011nnnnНомер контроллераЗначение
Program Change1100nnnnНомер программы
Channel Pressure1101nnnnДавление
Pitch Wheel Change Change1110nnnnНомер программы
Системные сообщения1111nnnn..

Табл. 2. Системные сообщения

СообщениеСтатус-байтБайт данных 1Байт данных 2
System Exclusive (SysEx)
System Exclusive11110000ID.
System Common
MTC Quater Frame11110001Тайм-код
Song Position Pointer11110010LSBMSB
Song Select11110011Номер песни
Tune Request11110110
End Of Exclusive (EOX)11110111
Real Time
Timing Clock11111000 (248)
Start11111010 (250)
Continue11111011 (251)
Stop11111100 (248)
Active Sensing11111110
System Reset11111111

4 Недостатки

MIDI разрабатывался, как доступный и практичный стандарт для передачи жестов исполнителя между любыми MIDI-устройствами [2]. Не в последнюю очредь благодаря своей легковесности он и получил такое распространение. Что ни говори, со своим предназначением он справляется прекрасно, и это подтверждается временем.
Итак, наверное, самый известный недостаток — ограничение значений контроллеров на 128 значений. Конечно, есть возможность передавать их с помощью двух байтов данных (что дает 16 384 возможных значений), но для этого надо передать три сообщения Control Change, что очень сильно загрузит протокол, так как данные по нему передаются со скоростью 31 250 бит/с. Это очень мало. Для сравнения, 12-нотный аккорд передастся примерно за 10 мс. И это без других сообщений, например Clock и CC. В реальном перфомансе, когда одновременно передается много различных параметров, могут возникнуть проблемы с синхронизацией.

Часть 2. Open Sound Contol

«Open Sound Control — это новый, оптимизированный для современных сетевых технологий протокол для взаимодействия компьютеров, звуковых синтезаторов и других мультимедиа устройств» — так был представлен OSC на международной конференции по компьютерной музыке в 1997 году [3]. OSC не является протоколом в том виде, каким является MIDI, так как он не описывает требований к аппаратному обеспечиванию — спецификации описывают лишь формат передачи данных. В этом плане OSC больше схож с XML или JSON, нежели с MIDI [8].

Пока оставим технические подробности и начнем с самого начала, с истории.

1 История, области применения

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 не предопределяет, какие сообщения должны использоваться для определенных параметров — это решается разработчиком конкретного девайса. Кроме того, это слово имеет и другое значение: протокол открыт, его спецификации находятся на официальном сайте, где можно скачать исходники.

2 Особенности
3 Анатомия сообщений

Что такое передача файлов midi. Смотреть фото Что такое передача файлов midi. Смотреть картинку Что такое передача файлов midi. Картинка про Что такое передача файлов midi. Фото Что такое передача файлов midi
Стоит отметить, что при использовании UDP, если сообщения передавались в разных пакетах, они не обязательно будут приходить в том порядке, в каком были переданы [6]. Допустим, были переданы сообщения:

/synth1/noteoff 54
/synth1/noteon 60

Фактически они могут прийти в обратном порядке:

/synth1/noteoff 60
/synth1/noteon 54

Это может привести к проблемам с управлением голосами в полифонии, например, в данном сообщении передается команда noteoff, которая выключает голос, а потом включает другую ноту. Если эти сообщения придут в обратном порядке, голос не освободится и новая нота не сможет запуститься.

Чтобы этого избежать, нужно передавать сообщения в одном пакете (bundle), либо использовать TCP/IP, он отличается от UDP тем, что гарантирует корректную доставку пакетов, передавая каждый из них до тех пор, пока он не передастся в изначальном виде. Нужно иметь ввиду, что ценой такому удобству будут большие в сравнении с UDP задержки, поэтому использование TCP/IP должно быть обосновано.

4 Pattern matching

дефис между двумя символами означает диапазон чисел в ASCII последовательности (дефис в конце строки не имеет специального значения);

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *