Кутузов Андрей. Сообщения высокого разрешения в Reason

kuvay (Кутузов Андрей)

1. Сообщения высокого разрешения

Информацию с органов управления можно разделить на два основных вида: логический и числовой. Если, например, педаль имеет только два состояния (нажата или отпущена, On/Off), то это — логическая информация. Если же мы крутим колесо, то каждое его положение представляется одним значением из некоторого диапазона.

Как это закодировать? Для логической информации достаточно, по идее, одного бита. Если бит сброшен (0), то педаль (или кнопка) отпущена, если установлен (1), то нажата. Но минимальной единицей информации в MIDI является байт, в данном случае байт данных. Поэтому придется использовать его целиком, несмотря на то, что реально нужен только один бит.

Для числовой информации один MIDI-байт позволяет закодировать 128 различных значений (от 0 от 127). А если изменения в звуке требуют более тонкой градации? Тогда используются два байта. Диапазон значений, который можно закодировать двумя обычными байтами, составляет 216-1, то есть от 0 до 65535. Но в MIDI, один бит из байта расходуется по служебной необходимости, поэтому два MIDI-байта дают в наше распоряжение только 14 бит. Но и это уже неплохо: 214 дает 16384 различных значений. Для изменений параметров синтеза этого более чем достаточно.

Мы уже говорили, что два байта составляют машинное слово. На рисунке ниже показана схема "MIDI-слова". Старшие биты обоих байтов заняты (сброшены в 0; напомню, что таким образом приемник может всегда отличить байт данных от статус-байта, в котором старший бит установлен в 1). Биты с 0 по 6 составляют младший значащий MIDI-байт (LSB, Least Significant Byte), c 8 по 14 — старший значащий байт (MSB, Most Significant Byte).

MSB и LSB на практике

Для того, чтобы передать число, большее 127, его нужно преобразовать в два MIDI-байта, то есть в пару MSB:LSB. Предположим, что орган управления (например, колесо) реагирует на самые аккуратные наши движения и может передавать свое положение в диапазоне от 0 до 16383. Мы повернули колесо в положение 11960. Какие MSB и LSB будут сгенерированы?

Число 11960 (шестнадцатеричное 0x2EB8) в двоичной форме записывается как 10111010111000. Для получения LSB нужно взять младшие семь бит (0111000) и дополнить их слева нулевым битом, как признаком байта данных (см. рис. 2, "упаковка"). Получится 00111000 (десятичное 56, шестнадцатеричное 0x38). Для получения MSB берем старшие семь бит (1011101) и также дополняем нулевым старшим битом. Получается 01011101 (десятичное 93, шестнадцатеричное 0x5D). Таким образом, число 11960 в виде пары MSB:LSB записывается как 93:56 (или, в шестнадцатеричном виде, 0x5D:0x38).

На практике, естественно, никто с нулями и единицами не заморачивается. Для упаковки числа в пару MSB:LSB нужно просто разделить число на 128. MSB будет частным от деления, LSB — остатком. Но обычный калькулятор так вот сразу вам частное и остаток не покажет. Поэтому алгоритм такой. Делим 11960 на 128, калькулятор дает 93,4375. Дробную часть отбрасываем, получаем MSB. Умножаем MSB на 128, получаем 11904. Вычитаем это число из исходного (11960 — 11904). Получаем LSB.

Распаковка выполняется с точностью до наоборот: умножаем MSB на 128, а затем прибавляем LSB (93 x 128 + 56 = 11960).

Работая с устройствами, удобнее представлять пару MSB:LSB не как одно большое число, а как результат грубой и тонкой настройки. MSB можно представлять в виде линейки с крупным делением шкалы (128 отрезков, рис. 3). Но если поднести к линейке лупу, то мы увидим, что каждый отрезок состоит еще из 128 частей. Можно представить MSB сантиметрами, а LSB — миллиметрами. Зачастую тонкая настройка не нужна даже для тех параметров, которые ее позволяют. Достаточно "сантиметровой линейки". С помощью нее можно оперировать шагами по 128. Установили MSB в 93, получили значение 11904, установили в 94 — получили 12032. Во многих случаях такой точности вполне достаточно.

2. Как выше описанное применимо к Reason

В общем, теории для объяснения цели моей статьи достаточно, а если вам интересна вся информация по протоколу MIDI, то ссылочные материалы смотрите в конце.

Меня заинтересовала возможность рулить параметры ризана более тонко, а не 128-ю значениями. Ведь какой регулятор не тронь, везде эти 128 значений. Фейдер микшера ризана 128 значений – 0, 1, 2, …, 126, 127. И так с каждым параметром в программе Reason… ну почти с каждым.

 2.1. Звуковысотное колесо

Звуковысотное колесо (Pitch Wheel) используется для плавного изменения высоты тона звучащей ноты. Процесс изменения высоты называется питч-бендом (Pitch Bend), а соответствующее MIDI-сообщение — Pitch Wheel Change (его часто и называют Pitch Bend).

Pitch Wheel Change — сообщение высокого разрешения, то есть позволяет использовать 16384 значений изменения высоты, и относится к контроллерам непрерывного типа. При движении колеса высота ноты скачкообразно изменяется во времени, но благодаря маленьким шагам (равным 1/16384 диапазона изменения) эти скачки обычно незаметны, и создается ощущение плавного изменения высоты.

Первый байт данных сообщения содержит младшие семь бит 14-битной величины изменения, второй — старшие семь бит. За центральное положение колеса (сдвиг высоты тона отсутствует) принято значение 8192 (16384 / 2, шестнадцатеричное 0x2000). Значения больше 8192 означают повышение высоты тона, меньше — понижение. Пара MSB:LSB для центрального положения колеса имеет вид 64:0 (8192 / 128 = 64 без остатка), в шестнадцатеричном виде — 0x40:0x00.

 2.2. Фэйдер микшера
В программе Reason имеется регулятор, в котором имеется очень тонкая градация значений – 16384. И мне пришла в голову идея это использовать. В таблице модуляций синтезатора тора в качестве масштаба для аудио, проходящего через тор, я применил Pitch Bend тора:

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

Согласно формулы зависимости уровня сигнала от значений громкости канала , где V – значение громкости канала. Подставив значения - получим:


Но в микшере Reason значение положения фейдера микшера равное 100 означает НЕ ИЗМЕНЯТЬ УРОВЕНЬ, а не 127, стало быть формула примет вид и значения таблицы:


Обратите внимание на столбец приращений уровня, приходящийся на изменение уровня канала. Например, при изменении уровня канала с 100 на 99, уровень аудио падает на 0,175 дБ и дальше по нарастающей, с 50 на 49 – 0,351. Причем это происходит не так уж и плавно, т.е. скачками, ступеньками.

2.3. Управляем Лоу пас фильтром синтезатора Тора колесом Pitch Bend

Идем дальше. Примерно таким же способом можно выполнить управление частотой среза фильтра синтезатора Thor. Ведь можно заметить, что как и все регуляторы ризана, кроме Pitch Bend, регулятор частоты среза имеет в своем наличии 128 положений – 0, 1, 2, …, 126, 127, частоты среза для фильтра тора это значения – 39.4, 41.4, 43.5, …, 19.600, 20600, 21600.

Во-первых, значения частоты среза фильтра идут скачками, во вторых не совсем те значения, которые заявлены на фильтре, выдает сам фильтр. Хотя второе не суть важно, но я все равно приведу значения, полученные при тестировании:

39,4 Hz – 38,03 Hz

946 Hz – 877,76 Hz

21600 Hz – 19731,1 Hz

Тестирование фильтра проводилось методом включения кнопочки SELF OSC, резонанс на максимум RESONANS=127 и при помощи анализатора спектра Adobe Audition версии 5.5 определялось, на какой частоте находится максимальная амплитуда звука, создаваемая фильтром.

Для управления частотой среза фильтра тора при помощи Pitch Bend в таблице модуляций тора необходимо прописать следующее:

Поскольку значений у частоты среза всего 128, то выбрать среднюю частоту (здесь предполагается, что положительные значения колеса Pitch Bend будут крутить регулятор частоты фильтра вправо, отрицательные влево) нужно из двух – это 63-е и 64-е значение. 63-е = 900 Hz, 64-е = 946 Hz. Остановлюсь на 946 Hz и проведу небольшие исследования:

Как видно из таблицы Pitch Bend действительно изменяет положение частоты среза фильтра и с очень маленьким шагом, собственно, что мне нужно было. Но дальнейший анализ показывает, что в использовании такой фильтр будет, не очень удобен, поскольку частота на самом фильтре выбрана не совсем удачно, а именно:

Значения Pitch Bend с 5500 дают те же значения частоты среза, что и все значения Pitch Bend выше. Путем нехитрого подбора и принятия решения, что значение Pitch Bend 8191 должно соответствовать значению частоты среза фильтра равное 19731 Hz, а значения Pitch Bend ниже 8191, должны иметь частоту среза фильтра ниже 19731 Hz. Такое значение частоты среза фильтра было найдено – это 151 Hz. Результаты анализа частот среза приведены ниже:

из таблицы видно, что значения фильтра ниже Pitch Bend=-3500, т.е. 15,26-20,63 Hz использовать, особого смысла нет, поскольку мы выйдем за слышимый диапазон частот.

Итак, имея модуляцию  , и выставив частоту среза фильтра равной 151 Hz, можно получить лоу пас фильтр с чувствительностью в разы превышающую чувствительность фильтра, который управляется через регулятор частоты среза непосредственно.

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

3. Дальнейшее применение колеса сообщений высокого разрешения

3.1. Тест 1

Создадим комбинатор и в нем два синтезатора тор. В таблице модуляций первого пропишем следующее:

CV1 output на задней панели тора соединим с CV1 входом комбинатора:

И в таблице модуляций комбинатора для второго тора пропишем:

Далее нарисовав дорожку автоматизации для Pitch Bend первого тора на 4 такта со значениями от -8192 до 8191, растянем эту автоматизацию до 64 тактов. Это делается для того, чтобы изменение значений происходило медленно и мы могли увидеть эти изменения. Нажмем воспроизведение и будем наблюдать.

Наблюдения показали, что модулируя Pitch Bend на первом торе, мы через CV провод и через комбинатор, можем передавать сообщения высокого разрешения на Pitch Bend  второго тора.

3.2. Тест 2

Теперь попробуем модулировать колесом Pitch Bend через CV провод, через комбинатор, параметр частоты среза фильтра. Проанализировав данные, я пришел к выводу, что т.о. модулирование происходит кратно дискретности в 128 значений.

Причиной этого послужило вот это:

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

3.3. Тест 3

Исключив модулирование через комбинатор, мы получим нужную модуляцию и еще раз подтвердим, что по CV-проводам передаются сообщения высокого разрешения. Для этого попробуем модулировать колесом Pitch Bend первого тора, с прописанным в его таблице модуляцией:

через CV провод:

параметр частоты среза фильтра второго тора – в данном случае в таблице модуляций второго тора запишем:

Проанализировав данные при помощи анализатора спектра Adobe Audition версии 5.5, я пришел к выводу, что модулирование происходит кратно дискретности Pitch Bend , т.е. частотой среза фильтра второго тора можно управлять не 128-ю значениями, а 16384-мя значениями через CV-провод.

 Выводы

Осталось решить вопрос передачи сообщений высокого разрешения через комбинатор. Как это сделать, видно из теста, когда мы Pitch Bend одного тора двигали Pitch Bend второго:

Т.е. чтобы передать сообщение высокого разрешения через CV-провод и через комбинатор, нужно передать сообщение высокого разрешения на питч устройства, в котором находится параметр, который нужно модулировать с высоким разрешением. А далее питч модулирует что-нибудь в таблице модуляций тора:

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

Т.о. при помощи Pitch Bend синтезатора Thor по CV-проводам сообщениями с высоким разрешением можно модулировать все, что возможно модулировать по CV-проводам, а также все, что можно модулировать и масштабировать в таблице модуляций синтезатора Thor.

Персональная страница автора: http://kuvay.pdj.ru

Список использованной литературы:

http://www.muzoborudovanie.ru/articles/midi/midi2.php и остальные статьи этого цикла


Загрузка беседы