MIDI RPN: Registered Parameter Numbers без плутанини

Схема вибору RPN через CC101/100 і передачі значення через Data Entry.
Схема вибору RPN через CC101/100 і передачі значення через Data Entry.
Зображення створено за допомогою генеративного ШІ для MIDITAUR. Концепція, композиція та текстове наповнення — MIDITAUR

Зміст публікації

MIDI RPN

RPN — Registered Parameter Number — розширює можливості стандартних Control Change повідомлень. Замість того щоб призначити кожному параметру окремий номер CC, MIDI дозволяє спочатку вибрати зареєстрований параметр, а потім передати його значення через Data Entry.

Як вибирається RPN

Для RPN у MIDI 1.0 використовують:

  • CC101 — RPN MSB;
  • CC100 — RPN LSB;
  • CC6 — Data Entry MSB;
  • CC38 — Data Entry LSB, коли потрібна додаткова точність;
  • CC96/97 — Data Increment / Data Decrement для відносної зміни.

Послідовність виглядає так: спочатку CC101 і CC100 вибирають номер параметра, потім CC6 і, за потреби, CC38 задають його значення.

Типові RPN

Серед стандартизованих параметрів є Pitch Bend Sensitivity, Fine Tuning, Coarse Tuning, а пізніші доповнення визначили й інші RPN, наприклад Modulation Depth Range.

Актуальна таблиця основних RPN

Нижче — актуалізований навчальний зріз за поточною MIDI 1.0 Control Change reference. Він включає базові tuning RPN, Modulation Depth Range, сучасний MPE Configuration Message, групу 3D Sound Controllers і Null Function.

RPN MSB RPN LSB Параметр Data Entry / значення Контекст
00H 00H Pitch Bend Sensitivity MSB: semitones; LSB: cents Базовий RPN; чутливість Pitch Bend.
00H 01H Channel Fine Tuning 14-бітне fine tuning; 40H 00H = A440 Уточнено RP-022.
00H 02H Channel Coarse Tuning MSB only; 40H = A440 Крок 100 cents.
00H 03H Tuning Program Change Номер tuning program Пов’язаний із MIDI Tuning.
00H 04H Tuning Bank Select Номер tuning bank Пов’язаний із MIDI Tuning.
00H 05H Modulation Depth Range GM2: semitone/cents interpretation Окремий MIDI 1.0 Addendum.
00H 06H MPE Configuration Message Значення визначає MPE specification Сучасний стандартизований RPN.
3DH 00H–08H Three Dimensional Sound Controllers Azimuth, elevation, gain, distance та ін. Див. RP-049.
7FH 7FH Null Function Number Вимикає Data Entry / Increment / Decrement до нового RPN/NRPN Безпечне завершення вибору параметра.

Важливо: таблиця MIDI.org прямо попереджає, що це огляд, а для точної реалізації треба звірятися з відповідною специфікацією та документацією пристрою.

RPN і NRPN — не те саме

RPN має значення, погоджені MIDI-стандартом. NRPN (CC99 і CC98) залишає номери параметрів виробникам, тому один і той самий NRPN на різних моделях може означати різні речі.

Data Increment / Data Decrement

Після вибору RPN можна змінювати поточне значення відносно через CC96 Data Increment або CC97 Data Decrement. У поточній MIDI.org reference для їхнього value вказано N/A: старе твердження, що data byte обов’язково має дорівнювати нулю, не варто використовувати як сучасне правило.

Практичне правило

Після роботи з RPN корисно надіслати RPN Null = 7FH/7FH. Поточна MIDI.org reference прямо зазначає, що це вимикає Data Entry, Data Increment і Data Decrement до вибору нового RPN або NRPN. Для точного програмування звіряйтеся з актуальною MIDI specification та MIDI Implementation Chart конкретного пристрою.

RPN як двокрокова команда

RPN легше зрозуміти, якщо не сприймати його як одну «магічну» команду. Логіка така: спочатку вибираємо, який параметр хочемо змінити, потім передаємо його значення. Це схоже на налаштування в меню: спершу відкриваємо потрібний пункт, а вже потім змінюємо число всередині нього.

Саме тому послідовність повідомлень важлива. Якщо параметр не вибрано правильно, наступне значення може стосуватися не того налаштування, яке ви мали на увазі. Звідси й практичне правило після роботи з RPN — не залишати випадково активним попередній вибір параметра.

Чому RPN і NRPN не варто змішувати

RPN використовує зареєстровані параметри, тобто їхнє призначення визначається стандартом. NRPN залишає простір для параметрів виробника. Для користувача головне не запам’ятати всі номери, а зрозуміти різницю в логіці: RPN — спільно визначене значення, NRPN — залежне від конкретної реалізації.

Розбір послідовності

Коли бачите групу Control Change, пов’язану з RPN, поставте собі три запитання:

  1. Який параметр зараз обирають?
  2. Яке значення йому передають?
  3. Чи завершено роботу так, щоб наступний Data Entry не змінив попередній параметр випадково?

Такий алгоритм корисніший за механічне заучування номерів контролерів, особливо на початковому етапі.

Мініпрактика

Намалюйте схему з трьох блоків: вибір параметра → передавання значення → завершення/скидання вибору. Під кожним блоком напишіть, навіщо він потрібний.

Перевірте себе

  • Чому RPN зручно мислити як послідовність, а не одну команду?
  • У чому принципова різниця між RPN і NRPN?
  • Яка небезпека виникає, якщо залишити попередній параметр вибраним?

Джерела