MIDI Pan CC#10: формула RP-036 і точний центр панорами

MIDI Pan CC#10 — значення 0, 64 і 127, стереопанорама та трактування центру за RP-036
MIDI Pan CC#10: керування положенням звуку в стереопанорамі, значення 0 — ліво, 64 — центр, 127 — право та трактування центру за RP-036.
Зображення створено за допомогою генеративного ШІ для MIDITAUR. Концепція, композиція та текстове наповнення — MIDITAUR.

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

MIDI RP-036 Default Pan Formula

RP-036 Default Pan Formula — MIDI Recommended Practice, випущена 13 вересня 2002 року для уніфікації реакції на Control Change CC#10 Pan. Її мета — дати виробникам спільну equal-power формулу панорамування, яка забезпечує коректний центр і плавний перерозподіл сигналу між лівим та правим каналами.

RP-036 пов’язана з General MIDI 2 (RP-024), GM Lite (RP-033) та DLS2 (RP-025). Загальну роль таких документів описано окремо: Специфікації MIDI: як працюють Recommended Practices і доповнення.

Чому для Pan потрібна окрема формула

CC#10 використовує звичайний MIDI-діапазон 0–127. Якщо дивитися на нього як на числову шкалу, геометричний центр лежить між значеннями 63 і 64 — тобто в точці 63,5.

Самого лише простого лінійного розподілу недостатньо. У стереопанорамі потрібно не тільки визначити позицію між left і right, а й зберегти рівномірний розподіл потужності, щоб у центрі сигнал не сприймався як провалений або, навпаки, надмірно гучний.

Equal-power panning

RP-036 використовує синус і косинус для побудови equal-power curve. У такій моделі gain лівого каналу поступово зменшується, а правого — зростає, причому сумарна потужність залишається сталою.

Для MIDI CC#10 рекомендовано використовувати такі формули:

Left gain [dB] = 20 × log10(cos((π / 2) × max(0, CC#10 − 1) / 126))

Right gain [dB] = 20 × log10(sin((π / 2) × max(0, CC#10 − 1) / 126))

Ключова деталь — віднімання 1 від CC#10 перед нормалізацією. Саме воно зміщує розрахунок так, щоб значення 64 дало математично точний центр.

Що відбувається в центрі

Для CC#10 = 64 маємо:

max(0, 64 − 1) / 126 = 63 / 126 = 0.5

Тоді кут дорівнює π/4, а:

  • cos(π/4) = √2 / 2;
  • sin(π/4) = √2 / 2.

Отже, left і right отримують однаковий gain приблизно −3.01 dB. Це і є equal-power center: обидва канали мають однаковий рівень, а сумарна потужність відповідає крайнім положенням панорами.

Крайні значення CC#10

Формула дає очікувану поведінку на краях діапазону:

  • CC#10 = 0 або 1 — повністю ліворуч: left gain = 0 dB, right gain прямує до тиші;
  • CC#10 = 64 — точний центр: left і right приблизно −3.01 dB;
  • CC#10 = 127 — повністю праворуч: right gain = 0 dB, left gain прямує до тиші.

Таким чином значення 64 стає однозначним MIDI-центром, попри те що арифметична середина діапазону 0–127 дорівнює 63,5.

Навіщо це було потрібно виробникам

До RP-036 різні MIDI implementations могли використовувати різні pan curves. Навіть коли всі вони прагнули equal-power distribution, фактична поведінка в центрі та між центром і краями могла відрізнятися.

Для MIDI-файлу або sequence це означало, що той самий CC#10 міг трохи по-різному звучати на різних synth engines. RP-036 дала спільну рекомендовану математичну модель і тим самим покращила передбачуваність playback.

Плавна зміна Pan під час звучання

RP-036 стосується не лише статичного значення pan. Якщо CC#10 змінюється під час звучання ноти, implementation має змінювати gain плавно, без audible clicks, crackles або інших артефактів.

Це особливо важливо для automation, realtime controllers і MIDI-файлів, у яких pan рухається в процесі відтворення.

Практичний сенс для програміста

Якщо synth engine або software instrument реалізує MIDI CC#10 за RP-036, достатньо:

  1. обмежити вхідний Pan до 0–127;
  2. обчислити нормалізовану позицію max(0, pan − 1) / 126;
  3. перетворити її на кут від 0 до π/2;
  4. одержати linear gains через cosine і sine;
  5. за потреби перевести їх у dB через 20 × log10(gain).

Так отримується однакова логіка для hardware synth, software instrument або MIDI playback engine.

Джерела