Русский

Шпаргалка по сообщениям MIDI: все типы, байты статуса и диапазоны

Загрузить InputConfig в Mac App StoreЭто приложение полностью бесплатное. Создавать учётную запись не нужно. Нет подписок, нет сложных загрузок, и ничего не заблокировано. Оптимизировано для Apple Silicon.

Сообщение MIDI 1.0 это байт статуса, который говорит, что это за сообщение, и следом ноль, один или два байта данных. Есть семь канальных сообщений, от Note Off на 80 hex до Pitch Bend на E0, каждое несёт свой канал в последней цифре, и набор системных сообщений от F0 до FF, у которых канала нет вообще. В таблицах ниже есть все они, с диапазонами, которые принимает каждый байт данных, и каждая строка ведёт на страницу этого сайта, где такое сообщение разобрано подробно.

Значения взяты из собственной сводки сообщений MIDI 1.0 MIDI Association и её списка Control Change, просмотренных 27 октября 2026 года. Я делаю InputConfig, бесплатное приложение для Mac, которое читает и отправляет MIDI, поэтому одна из таблиц показывает, какие из этих сообщений оно обрабатывает.

Шаги

  1. Прочитайте первый байт сообщения в шестнадцатеричном виде.
  2. Если он от 80 до EF, первая цифра называет сообщение, а вторая цифра это канал: 0 для канала 1 и так до F для канала 16.
  3. Если он от F0 до FF, это системное сообщение без канала, поэтому найдите его в системной таблице.
  4. Прочитайте следующие за ним байты данных, каждый от 0 до 127, по таблице канальных сообщений.
  5. Для Control Change найдите номер контроллера в таблице CC.

Отличите байт статуса от байта данных

Каждый байт в MIDI 1.0 это либо байт статуса, либо байт данных, и это решает старший бит. В таблице MIDI Association каждый байт статуса записан с 1 в начале двоичной записи, а каждый байт данных с 0.

  • Байты статуса. От 80 до FF hex, от 128 до 255. Они начинают сообщение.
  • Байты данных. От 00 до 7F hex, от 0 до 127. Поэтому почти любое значение в MIDI заканчивается на 127.
  • Канал. В канальном сообщении вторая шестнадцатеричная цифра это канал, от 0 до F, который приложения показывают как каналы с 1 по 16. Так 90 это Note On на канале 1, а 9F это Note On на канале 16.
  • 14-битные значения. Когда 128 шагов не хватает, два байта данных объединяются: младшая половина, LSB, и старшая половина, MSB. Вместе они дают от 0 до 16383, а Pitch Bend помещает свой центр на 8192, то есть 2000 hex.

Байт от 128 и выше начинает сообщение, а байт меньше 128 несёт значение. Подробнее об обоих в статьях каналы MIDI и MSB и LSB.

Читайте канальные сообщения

Эти семь сообщений несут музыку: ноты, давление, ручки, смену патчей и колесо высоты тона. Столбец статуса записан в hex, а младшая цифра задаётся каналом.

СообщениеСтатус (hex)Байт данных 1Байт данных 2Подробнее
Note Offот 80 до 8FНомер ноты, от 0 до 127Скорость отпускания, от 0 до 127номера нот
Note Onот 90 до 9FНомер ноты, от 0 до 127Velocity, от 0 до 127 (0 действует как Note Off)velocity
Полифоническое давление клавишиот A0 до AFНомер ноты, от 0 до 127Давление, от 0 до 127aftertouch
Control Changeот B0 до BFКонтроллер, от 0 до 119Значение, от 0 до 127список CC
Program Changeот C0 до CFПрограмма, от 0 до 127Нетprogram change
Давление каналаот D0 до DFДавление, от 0 до 127Нетaftertouch
Pitch Bendот E0 до EFМладшая половина (LSB), от 0 до 127Старшая половина (MSB), от 0 до 127pitch bend

Note On с velocity 0 считается Note Off, и собственное руководство MIDI Association по Arduino использует это, чтобы закончить ноту. Номер контроллера в Control Change заканчивается на 119, потому что 120-127 заняты сообщениями режима канала ниже. Диапазон Pitch Bend в полутонах вообще не входит в сообщение: его решает приёмник, а в таблице MIDI отмечено, что его можно задать через RPN 0. Program Change и давление канала несут один байт данных, а остальные пять несут два.

Узнайте сообщения режима канала

Сообщения режима канала используют байт статуса Control Change, от B0 до BF, с номерами контроллеров от 120 до 127. Они меняют поведение канала, а не звук.

КонтроллерНазваниеЧто делает
120All Sound OffРазом заглушает все голоса
121Reset All ControllersВозвращает контроллеры в состояние по умолчанию
122Local Control0 выключает, 127 включает: играют ли клавиши собственный звук синтезатора
123All Notes OffОтпускает все удерживаемые ноты
124 и 125Omni Mode Off и OnСлушает ли устройство один канал или все
126 и 127Mono Mode On и Poly Mode OnОдна нота на канал или аккорды

В списке MIDI Association отмечено, что 124-127 тоже выключают все ноты. Кнопка паники это в основном CC 123 и CC 120, отправленные на всех 16 каналах. Точные байты перечислены в статье паника MIDI.

Читайте системные сообщения

Системные сообщения начинаются с F и не несут канала, поэтому их может прочитать любое устройство на кабеле. F0-F7 это общие системные сообщения, а F8-FF это сообщения реального времени, единственные, которые разрешено вставлять в середину сообщения SysEx.

Статус (hex)СообщениеДанныеПодробнее
F0System ExclusiveID производителя, затем любое число байтов данных до F7SysEx
F1MIDI Time Code quarter frameОдин байт: часть тайм-кода
F2Song Position PointerДва байта: 14-битный счёт долей от начала, где доля равна 6 тактам синхронизации
F3Song SelectОдин байт: какая песня или последовательность
F6Tune RequestНет. Просит аналоговые синтезаторы подстроить генераторы
F7End of ExclusiveНет. Завершает сообщение SysEx
F8Timing ClockНет. Отправляется 24 раза на четвертную нотутакт MIDI
FA, FB, FCStart, Continue, StopНеттакт MIDI
FEActive SensingНет. Необязательно, не реже раза в 300 мс, если устройство начало его отправлять
FFResetНет. Возвращает приёмники в состояние после включения

F4, F5, F9 и FD не определены. Clock, Start и Stop это системные сообщения, поэтому канала у них никогда нет. О дампах SysEx и приложениях, которые их отправляют, см. страницу SysEx librarian для Mac.

Найдите номера CC, которые стоит знать

Многие из 120 номеров Control Change остаются неопределёнными, но у нескольких есть имена в стандарте MIDI, которым следуют синтезаторы и приложения. Эти данные взяты из списка Control Change MIDI Association.

CCНазваниеПодробнее
0 и 32Bank Select, MSB и LSBMSB и LSB
1Колесо модуляциисписок CC
2Дыхательный контроллер
4Ножной контроллер
6 и 38Data Entry, MSB и LSBNRPN и RPN
7Громкость канала
10Панорама
11Экспрессия
64Педаль сустейна (демпфера): от 0 до 63 выключена, от 64 до 127 включенапедаль сустейна
65, 66, 67Портаменто, состенуто и мягкая педаль, включено или выключено
98 и 99Номер NRPN, LSB и MSBNRPN и RPN
100 и 101Номер RPN, LSB и MSBNRPN и RPN

Контроллеры с 32 по 63 это младшие половины, LSB, контроллеров с 0 по 31, так Bank Select превращается в CC 0 плюс CC 32. CC 64 это переключатель, поэтому любое значение от 64 и выше означает, что педаль нажата. В списке MIDI CC перечислены все номера.

Посмотрите, что InputConfig читает и отправляет

InputConfig превращает MIDI с клавиатуры, пэд-контроллера или DAW в клавиши, щелчки, громкость Mac и многое другое, а также отправляет MIDI с игрового контроллера или клавиатуры через виртуальный порт с именем InputConfig. Вот честный список по сообщениям.

СообщениеПривязка как входОтправка как выход
Note On и OffДа, как удерживаемая кнопкаДа, с velocity, заданной в строке
Control ChangeДа, как переключатель, регулятор или поворотДа, фиксированное значение или положение стика либо курка
Pitch BendДа, плюс и минус, как у стикаДа, с оси стика или с кнопки
AftertouchДаНет
Program ChangeДа, и он может активировать пресетДа
Start, Continue, StopДаДа
Timing ClockНетНет
System ExclusiveНетНет
NRPN и RPNНетНет, отправляются отдельные сообщения

Две детали сбивают людей с толку. Кнопки не чувствительны к силе нажатия, поэтому каждый выход MIDI Note играет с velocity, заданной в его строке, от 1 до 127, а курок на CC 11 это способ получить динамику. И ручка в режиме Switch срабатывает, когда значение переходит за середину, что превращает педаль сустейна в переключатель включено и выключено.

Live Visualizer InputConfig в виде MIDI с пресетом MIDI: Knob Deck, показывающий клавиатуру, регуляторы и последние сообщения.
Figure 1. Live Visualizer называет каждую ручку по номеру CC, поэтому CC 7, 10, 64, 71 и 1 здесь читаются прямо по таблице выше.
Редактор InputConfig со строками крестовины, каждая из которых отправляет Program Change, одна из них с Bank Select перед ним.
Figure 2. CC 0 и Program Change работают вместе. Крестовина вверх отправляет Bank Select, затем Program Change, одним нажатием.

Если элемент управления отправляет ноту, CC, pitch bend или Program Change, InputConfig может его привязать. Настройку описывают страницы MIDI в нажатие клавиш и выход MIDI.

Если сообщение не такое, как вы ожидали

Большинство сюрпризов связано с нумерацией, а не с неисправным оборудованием. Поднимайтесь по этой лестнице, начиная с самого простого шага:

  1. Проверьте нумерацию каналов. В байте от 0 до 15, а в приложении от 1 до 16. Устройство на канале 10 отправляет 99 для Note On.
  2. Проверьте нумерацию программ. В сообщении от 0 до 127, а во многих списках патчей от 1 до 128, поэтому патч 1 отправляется как 0.
  3. Проверьте скрытый Note Off. Note On с velocity 0 завершает ноту, поэтому журнал, полный Note On, всё равно может отпускать клавиши.
  4. Расшифруйте сырые байты. Вставьте их в декодер сообщений MIDI или понаблюдайте за их приходом в тестере MIDI.

Ошибка на единицу это самая частая ошибка MIDI.

Углубитесь в одно сообщение

Каждая страница здесь берёт одну строку таблиц и объясняет её на примерах. Если для вас всё это внове, начните со статьи что такое MIDI.

Коротко

  • Сначала статус. Байт от 80 hex и выше начинает сообщение, а следующие за ним байты это значения от 0 до 127.
  • Канальные сообщения. От 80 до EF, канал в последней цифре.
  • Системные сообщения. От F0 до FF, без канала: SysEx, такт, Start, Stop и остальные.
  • Большие числа. Два байта данных дают от 0 до 16383, как в Pitch Bend.

Прочитайте первую цифру байта статуса, и вы знаете, что это за сообщение.

Вопросы

Сколько существует типов сообщений MIDI?

В MIDI 1.0 семь канальных сообщений (Note Off, Note On, полифоническое давление, Control Change, Program Change, давление канала и Pitch Bend), сообщения режима канала на CC 120-127 и системные сообщения от F0 до FF.

Что такое байт статуса MIDI?

Это первый байт сообщения, от 80 до FF hex. Он говорит, что это за сообщение, а для канальных сообщений ещё и на каком из 16 каналов оно передаётся.

Чем CC отличается от NRPN?

CC это одно сообщение с номером контроллера и значением от 0 до 127. NRPN выбирает параметр через CC 99 и 98 и задаёт его через Data Entry на CC 6 и 38, поэтому одно изменение занимает три или четыре сообщения.

Какие сообщения MIDI поддерживает InputConfig?

Он привязывает ноты, Control Change, pitch bend, aftertouch, Program Change и Start, Continue и Stop, а отправляет ноты, Control Change, pitch bend, Program Change и транспорт. Такт, SysEx и NRPN он не обрабатывает.

Является ли такт MIDI канальным сообщением?

Нет. Timing Clock, F8, это системное сообщение реального времени без канала, отправляемое 24 раза на четвертную ноту.

Ещё на русском

Подробные руководства на английском

Кто это пишет. Ryleigh Newman разрабатывает InputConfig и каждый день управляет своим Mac с помощью геймпада, потому что руки плохо слушаются. Эта страница переведена с английского. Если на Mac выбран русский язык, основные кнопки и меню приложения показываются по-русски; на этой странице они названы так же, с английским названием в скобках. Остальная часть приложения и сайта на английском языке.

Эта страница на других языках: English, Deutsch, Español, Français, Italiano, 日本語, 한국어, Polski, Português, ไทย, 繁體中文, 简体中文

Загрузить InputConfig в Mac App StoreБесплатно. macOS 14 или новее. Без учётной записи, ничего не покидает ваш Mac. Исходный код на GitHub.