Где хранится информация о том как проигрывать ноты записанные в midi файле
Перейти к содержимому

Где хранится информация о том как проигрывать ноты записанные в midi файле

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

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

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

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

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

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

  • Июнь 1981 — на выставке NAMM произошел первый разговор на тему единого интерфейса между главами Sequential Circuits, Roland и Oberheim.
  • Осень 1981 — первая версия интерфейса под названием UMI (Universal Musical Interface).
  • Июнь 1982 — на выставке NAMM были представлены плоды международной разработки. Ввиду возможных юридических проблем от названия UMI пришлось отказаться в пользу MIDI.
  • Октябрь 1982 — закончена предварительная спецификация MIDI.
  • Декабрь 1982 — выпушен первый синтезатор, оборудованный MIDI-интерфейсом — Sequencial Circuits Prophet 600.
  • 1983 — сформированы комитет по MIDI-стандартам (JMSC), международная группа пользователей MIDI (IMUG), выпущена спецификация MIDI 1.0.
  • 1984 — сформирована ассоциация MIDI-производителей (MMA).
3 Основы

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

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

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

Типы MIDI-сообщений.

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

Структура MIDI-сообщения.

Как видно из рисунка, информации о типе сообщений отводится всего 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 Номер программы
Системные сообщения 1111nnnn . .

Табл. 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

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

  • Языки программирования: C/C++, Java, Php, Python, Ruby.
  • Среды визуального программирования и синтеза: Bidule, Chuck, Common Music CPS, Intakt, Max/MSP, Open Sound World, Pd, SuperCollider, Reaktor, VVVV.
  • Устройства для работы с сенсорами: EtherSense, Gluion, IpSonLab Kroonde, Lemur, Smart, Controller, Teabox, Toaster.
  • Другие программы: EyesWeb, Picker, SonART, SpinOSC.
2 Особенности
  • Позволяет использовать любые протоколы передачи данных (самые распространенные — TCP/IP и UDP).
  • OSC позволяет задавать интуитивные адреса для параметров. Например, если потребуется задать громкость, равной 100 третьего канала микшера, сообщение может выглядеть так: «/mixer/channel/4/volume 100».
  • Есть возможность управления несколькими параметрами с помощью одного сообщения, используя так называемый pattern matching. К примеру, понизить до 10 громкость всех каналов микшера можно с помощью такого сообщения: «/mixer/channel/*/volume 10». Такой формат записи может быть знаком программистам и пользователям операционных систем семейства Unix.
  • В одном OSC-сообщении можно передавать несколько типов данных.
  • Тайм-тэги (time tags). Каждому сообщению присваивается временнАя метка.
3 Анатомия сообщений

Анатомия OSC-сообщений.
Стоит отметить, что при использовании 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
  • «?» — соответствует любому одному символу.
  • «*» — соответствует последовательности из нуля или любого другого числа символов.
  • Символы в квадратных скобках (например, «[string]») — соответствует любому символу в строке. В квадратных скобках дефис (-) и восклицательный знак (!) имеют специальное значение:

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

MIDI файлы – как открыть, редактировать и конвертировать формат

Файл с расширением .MID или .midi представляет собой файл цифрового интерфейса музыкальных инструментов. В отличие от обычных аудиофайлов, таких как MP3 или WAV, MIDI-файлы не содержат реальных аудиоданных и поэтому имеют гораздо меньший размер. Например, файл MID может объяснить, какие ноты воспроизводятся, когда они воспроизводятся, и какой длины или громкости должна быть каждая нота.

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

Это делает MIDI-файлы идеальными для обмена музыкальной информацией между аналогичными приложениями и для передачи через интернет-соединения с низкой пропускной способностью. Небольшой размер также позволяет хранить файлы на небольших устройствах, таких как дискеты, – обычная практика в ранних играх для ПК.

Отображение файлов формата MIDI в проводнике системы Windows 10

Вы можете прочитать больше о формате файла MIDI на MIDI.org.

Файл с расширением .MID может быть файлом данных MapInfo. Вы можете открыть его с помощью GDAL или Pitney Bowes MapInfo.

Как воспроизвести MIDI файл

MIDI-файлы могут быть открыты с помощью проигрывателя Windows Media, QuickTime, Winamp, VLC, WildMidi, TiMidity++, WildMIDI, Synthesia, MuseScore, Amarok, от Apple Logic Pro, и очень вероятно, некоторых других приложений. Вы также можете воспроизводить MIDI-файлы онлайн с помощью онлайн-секвенсора.

Некоторые из этих программ также открывают MIDI-файлы в Linux, особенно TiMidity++, WildMIDI и Amarok.

Midi Sheet Music – это портативная программа (вам не нужно её устанавливать), которая также может воспроизводить MIDI-файлы и даже показывает ноты в реальном времени во время воспроизведения звука. Она также позволяет конвертировать MIDI-файл в ноты, которые вы можете распечатать или сохранить на своем компьютере в формате PDF или в виде нескольких файлов изображений PNG.

Sweet MIDI Player – это MIDI-плеер для iOS (iPhone и iPad), но он воспроизводит только 75 процентов от файла; Вы можете заплатить за полную функциональность. Пользователи Android могут открывать MID-файлы с помощью приложения Fun Fun MIDI Player или MIDI Voyager Karaoke Player.

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

Как конвертировать MIDI-файл

FileZigZag – это бесплатный онлайн-конвертер файлов, который может конвертировать MIDI-файлы в MP3, WAV, AAC, FLAC, OGG, WMA и некоторые другие аудио форматы.

SolMiRe MIDI – это ещё один веб-сайт, который конвертирует MIDI-файлы в MP3, но он предлагает некоторые дополнительные настройки, недоступные через FileZigZag.

Вышеуказанная программа Midi Sheet Music может быть использована для преобразования MIDI-файла в ноты.

Всё ещё не можете открыть файл

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

Другими словами, ваш файл может выглядеть как MIDI или MID, когда, на самом деле, это MII. В этом случае, если у вас действительно файл MII, то это файл виртуального аватара Wii.

Другое расширение файла, похожее на MIDI и MID, – это MDI, используемое для файлов Microsoft Document Imaging. Файлы MDI не работают с программами, указанными выше, но вместо этого требуют Microsoft Office или конвертер MDI2DOC (для преобразования MDI в DOC).

Если вы уже знаете, как открывать файлы Musical Instrument Digital Interface и вместо этого ищете способы загрузки файлов MIDI, попробуйте Hit Trax.

Где хранится информация о том как проигрывать ноты записанные в midi файле

Предпосылки

Необходимость в подобном универсальном стандарте возникла примерно к концу 70-ых годов. К этому времени уже широко начали использоваться синтезаторы, управлявшиеся в основном с помощью различных вариантов интерфейса CV/Gate (control voltage). Главным его недостатком было то, что он мог управлять только одним голосом полифонии, при этом передавая только сам факт нажатия клавиши и высоту тона. Кроме того, одной из основных предпосылок к появлению MIDI стала потребность музыкантов того времени управлять с одной клавиатуры несколькими синтезаторами одновременно. При этом от разработчиков требовалось, чтобы соединение инструментов было простым, а сам интерфейс надежным и недорогим.

История создания

В июне 1981 года на выставке NAMM между главами компаний Roland, Sequental Circuits и Oberheim состоялось первое обсуждение возможности создания подобного универсального интерфейса, и уже осенью того же года была создана его первая версия. К концу 1982 года была завершена предварительная спецификация MIDI и выпущены первые MIDI-синтезаторы Roland Jupiter-6 и Prophet 600. И в 1984 году была сформирована ассоциации MIDI-производителей (MMA).

Основы

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

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

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

MIDI как стандарт состоит из нескольких составных частей:

  • собственно протокол передачи данных, включая структуру MIDI-сообщений, а также систему MIDI-каналов,
  • аппаратная спецификация — разъемы, кабели, порты и т.п.,
  • спецификация хранения данных,
  • и стандарты соответствия номеров «программ» определенным тембрам.

MIDI-сообщения

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

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

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

MIDI-каналы

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

Эта проблема была решена с помощью каналов. Существует 16 MIDI-каналов, и каждое сообщение может идти только по одному из них. При этом каждое устройство настраивается на прием сообщений, приходящих только по одному из каналов.

Тот же подход используется для подключения полифонического синтезатора (способного воспроизводить несколько нот одновременно) к секвенсору.

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

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