Технологии программирования миди

 Навигация:

 Поиск:

 Новости:

17.02.2007
Полностью переработан дизайн сайта.

6.01.2007
Добавлен раздел Наработки Полезные и интересные программы и их исходники от автора.

19.11.2006
Функции WriteVarLen и ReadVarLen портированы с СИ на Delphi читать

14.11.2006
Появилась cтатья Midi-протокол глазами программиста

24.10.2006
Написана вторая часть MMSystem Функции midiOutGetVolume midiOutSetVolume midiOutMessage midiOutShortMsg и midiOutLongMsg

12.10.2006
Добавлен раздел Multimedia , который содержит большое количество информации по мультимедийным технологиям.

1.09.2006
Добавлен раздел MMSystem в котором находятся
подробные опсания функций winmm.dll, определенных в модуле mmSystem.pas,
с примерами их использования в Delphi.

13.08.2006
Опубликован исходник приложения, записывающего игру на клавиатуре
в стандартный midi-файл SMF - 0

4.07.2006
Добавлен раздел Структура формата миди-файла

 Счетчики:
Rambler's Top100 Яндекс цитирования Rambler's Top100
 Контент:

Программирование чувствительности колеса изменения тона

Что же такое RPN? Это аббревиатура от английского словосочетания Registered Parameter Number (номер фиксированного параметра). Спецификация MIDI определяет три таких параметра:
RPN 0 - чувствительность манипулятора (колеса) изменения тона (Pitch Wheel), RPN 1 - грубая подстройка высоты тона,
RPN 2 - точная настройка высоты тона. Однако звуковые карты семейства AWE поддерживают только один из этих параметров (нулевой). По умолчанию диапазон изменения тона составляет ±2 полутона (или плюс-минус один тон). Положение колеса задается числом от -8 192 до 8 191.

Часто бывает так, что диапазона шириной в 2 тона оказывается недостаточно для реализации эффекта плавного изменения высоты звука. Эта проблема решается довольно просто. Через два манипулятора ввода данных (Data entry LSB и Data entry MSB) устанавливается новое значение RPN 0.

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

Но, например, для программирования чувствительности манипулятора изменения тона диапазона в 128 значений оказывается недостаточно. Поэтому для передачи данных используется два семибитных фрагмента одного большого четырнадцатибитного числа. С помощью него можно передавать числа от 0 до 16 383 (или от -8 192 до 8 191). Младшие 7 бит (Least Significant Bit. LSB - младший байт) передаются через манипулятор 38, старшие 7 бит (Most Significant Bit, MSB - старший байт) передаются через манипулятор 6.

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

MIDI-команды изменения чувствительности колеса высоты тона

Таблица 3.2
Номер MIDI-сообщения Номер манипулятора (controller) Название манипулятора Положение манипулятора (value)
1 101 RPN MSB 0
2 100 RPN LSB 0
3 6 Data Entry MSB X
4 38 Data Entry LSB Y

В таблице x - число, задающее диапазон высоты звука в полутонах, a Y - число, уточняющее ширину диапазона (точная настройка, заданная в сотых долях полутона, - центах). Если нет необходимости задавать диапазон с такой точностью, просто не вводите последнее MIDI-сообщение. Диапазон возможных значений параметров Х и Y: от 0 до 127. Чувствительность колеса высоты тона можно задавать индивидуально для каждого MIDI-канала. В результате выполнения этой последовательности (после нажатия кнопки Play) чувствительность манипулятора высоты тона для первого MIDI-канала будет ±1 октава (или ±12 полутонов).

Управление параметрами звука по MIDI

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

Что касается описанных возможностей, то их иногда бывает недостаточно. Например, ни одна современная танцевальная композиция не обходится без эффектов, связанных с изменением параметров резонансного фильтра. А если и обходится, то у ценителей такой музыки может возникнуть вполне справедливый вопрос: "Почему бы этому DJ не покрутить колесо управления фильтром?" И это не просто наше личное мнение. Не зря ведь фирма Yamaha в своем самом современном стандарте XG определила, что любой инструмент, соответствующий данному стандарту, обязан иметь манипуляторы управления параметрами звука (такими как уровень резонанса и частота среза фильтра). Звуковые карты семейства SBLive стандарт XG не поддерживают. Однако возможность управления параметрами звука при помощи хитрых, но не сложных MIDI-сообщений имеется. Об этой возможности мы и расскажем.

Кроме RPN, бывают еще и NRPN (Non Registered Parameter Number] - номер нефиксированного (изменяемого) параметра. Главное его отличие от RPN состоит в том, что одни и те же NRPN у разных производителей MIDI-оборудования могут соответствовать различным параметрам генерации звука. Задав NRPN, можно выбрать интересующий параметр генерации звука и определить его значение с помощью манипуляторов Data Entry. Для звуковых карт семейства SBLive значение NRPN MSB всегда должно быть равно 127, а в NRPN LSB нужно передавать номер интересующего вас параметра звука. Значение этого параметра передается через манипуляторы Data Entry. Таким образом, процесс управления параметрами звука сводится к выполнению последовательности MIDI-сообщений, приведенных в табл. 3.2.

MIDI-сообщения управления параметрами звука

Таблица 3.3.
Номер MIDI-сообщения Номер манипулятора (controller) Название манипулятора Положение манипулятора (value)
1 99 NRPN MSB 127
2 98 NRPN LSB N
3 6 Data Entry MSB X
4 38 Data Entry LSB Y

Здесь N - номер контролируемого параметра, а Х и Y - числа, рассчитываемые по следующим формулам:
Х = (ЗПЗ+ 8192)/128 Y = (ЗПЗ + 8192) % 128,
где символ " / " означает целую часть отделения на 128, а " % " - остаток от деления; ЗПЗ - значение параметра звука.

Чтобы определить значение параметра звука, исходя из данных, хранящихся в MIDI-файле, нужно совершить обратное преобразование, воспользовавшись следующей формулой:
ЗПЗ = [ (Data Entry MSB) S 128 + Data Entry LSB)] - 8 192.

Однако в реальной жизни компьютерного музыканта управление параметрами звука осуществляется более простым способом. Во-первых, если вы собираетесь управлять только каким-либо одним параметром, достаточно однократного выполнения MIDI-команд 1 и 2 (см. табл. 3.2), а далее можно многократно изменять только значения параметра через манипуляторы Data Entry. Во-вторых, скорее всего, вам не придется каждый раз рассчитывать числа Х и Y с помощью калькулятора. Вы можете написать простенькую программку на языке С + + Дело вот в чем. Читатели, знакомые с машинной арифметикой, наверное, уже догадались, что формулы, приведенные выше, годятся только в том случае, если для представления чисел используется 14 бит, один из которых знаковый. При этом диапазон возможных значений будет лежать в пределах от -8 192 до 8 191. Однако большинство звуковых параметров, как и положения манипуляторов, кодируются семибитным числом. Диапазон значений при таком способе представления чисел лежит в пределах от 0 до 127. Необходимость использования манипулятора Data Entry MSB просто отпадает, т. к. старшие семь бит четырнадцатибитного числа оказываются ненужными (младших семи бит как раз достаточно). В этом случае можно выполнить первые две команды из табл. 3.2, а для изменения выбранного этими командами параметра звука можно воспользоваться обычными средствами музыкального редактора (изменяя положение манипулятора 38). Прежде чем приводить список всех доступных параметров, закрепим теоретические знания практикой. Рассмотрим пример управления частотой среза фильтра при помощи параметра NRPN в редакторе Cakewalk. Номер нефиксированного параметра, управляющего частотой среза - 21, диапазон значений: от 0 до 127 (т. е. можно обойтись без каких-либо формул). В начале первого трека мы разместим последовательность из двух MIDI-сообщений. Если хотите услышать результат, нужно записать последовательность каких-нибудь нот. Допустим, вы это сделали. Теперь частотой среза можно управлять при помощи манипулятора 38. Пример изменения положения этого манипулятора средствами окна Controllers приведен на рис. 3.52. Возможно, результат своих действий вам не удастся услышать сразу. Глубина регулировки частоты среза зависит от настроек конкретного пресета. Простейший выход- попробуйте сменить пресет на какой-нибудь другой, выбранный методом "научного тыка". Ну, а если вам захочется использовать определенный

Доступные параметры звука

Таблица 3.3.
Управление эффектом № Название в реальном времени (Realtime) Диапазон Квант измерения
Delay before LF01 starts 0 (задержка перед запуском LF01 - от 0 до 22 с) 0...5900 4 мс
LF01 Frequency (частота LF01 от 0 до 10,72 Гц) 0...127 0,084 Гц
Delay before LF02 starts 2 (задержка перед запуском LF02 - от 0 до 22 с) 0...5900 4 мс
LF02 Frequency (частота LF01 отО до 10,72 Гц) 0...127 0,084 Гц
Envelope 1 delay time (задержка 4 огибающей амплитуды от 0 до - 22с) 0...5900 4 мс
Envelope 1 attack time (время 5 атаки огибающей модуляции от - 0 до 5,9 с) 0...5940 1 мс
Envelope I hold time (время 6 удержания огибающей - модуляции от 0 до 8 с) 0...8191 1 мс
Envelope 1 decay time (время 7 спада огибающей модуляции от - 0,023 до 23,7) 0...5940 4 мс
Envelope 1 sustain level 8 (уровень поддержки огибающей - модуляции) 0...127 0,75 дБ
Envelope 1 release time (время 9 освобождения огибающей - модуляции от 0,023 до 23,7 с) 0...5940 4 мс
Envelope 2 delay time (задержка 10 огибающей амплитуды от 0 до - 22с) 0...5900 4 мс
Envelope 2 attack time (время 11 атаки огибающей амплитуды от - 0 до 5,9 с) 0...5940 1 мс
Envelope 2 hold time (время 12 удержания огибающей - амплитуды от 0 до 8 с) 0...8191 1 мс
Envelope 2 decay time (время 13 спада огибающей амплитуды от - 0,023 до 23,7) 0...5940 4 мс
Envelope 2 sustain level 14 (уровень поддержки огибающей - амплитуды) 0...127 0,75дБ
Envelope 2 release time (время 15 освобождения огибающей - амплитуды от 0,023 до 23,7 с) 0...5940 4 мс
16 Initial Pitch (начальная высота тона) -8192...8191 1 цент
17 LF01 to Pitch (степень влияния LF01 на высоту тона от - 1 до + +1 октавы) -127...127 9,375 цента
18 LF02 to Pitch (степень влияния LF02 на высоту тона от - 1 до + +1 октавы) -127...127 9,375 цента
19 Envelope I to Pitch (степень влияния огибающей модуляции на высоту тона от - 1 до +1 октавы) -127...127 9,375 цента
20 LF01 to Volume (степень влияния LF01 на громкость) 0...127 0.1875 дБ
21 Initial Filter Cutoff [начальная частота среза фильтра от 100 + до 80000 Гц) 0...127 62 Гц
22 Initial Filter Resonance Coefficient (начальный коэффициент резонансного фильтра) 0...127 см. табл. 3.4
23 LF01 to Filter Cutoff (степень влияния LF01 на частоту среза)м 0...127 56,25 цента
24 Envelope 1 to Filter Cutoff (степень влияния огибающей - модуляции на частоту среза) -127.,.127 56,25 цента
25 Chorus Effects Send (глубина хоруса) 0...255 -
26 Reverb Effects Send (глубина реверберации) 0...255 -
пресет, то можно изменить изначальную глубину регулировки частоты среза, заданную в SoundFont, на новое значение с помощью параметра NRPN 24.

Для того чтобы вернуть начальные значения параметров звука, хранящиеся в SoundFont, достаточно выполнить MIDI-команду Reset All Controllers (манипулятор 121).

Теперь приведем полный список доступных через параметр NRPN регулировок звука. Табл. 3.3 содержит номера NRPN LSB, их названия, возможность изменения параметров во время воспроизведения ноты (Realtime), диапазон изменения параметра и единицы измерения. Стоит отметить, что EMU8000 имеет встроенную таблицу параметров резонансного фильтра. Посредством NRPN LSB 22 (управление уровнем резонанса) выбирается
Таблица 3.4. Параметры фильтра
Коэффициент Low Fc (Hz) Low Q (dB) High Fc (kHz) High Q (dB) DC Attenuation(dB)
о 92 5 Flat Flat -0,0
1 93 6 8,5 ' 0,5 -0,5
2 94 8 8,3 1,0 -1,2
3 95 10 8,2 2,0 -1,8
4 96 11 8,1 3,0 -2,5
5 97 12 8,0 4,0 -3,3
6 98 14 7,9 5,0 -4,1
7 99 16 7,8 6,0 -5,5
8 100 17 7,7 7,0 -6,0
9 100 19 7,5 9,0 -6,6
10 100 20 7,4 0,0 -7,2
11 100 22 7,3 11,0v -7,9
12 100 23 7,2 13,0 -8,5
13 100 25 7,1 15,0 -9,3
14 100 26 7,1 16,0 -10,1
номер строки в табл. 3,4, содержащей параметры фильтра, причем каждому номеру таблицы одновременно соответствует несколько значении NRPN LSB 22. Например, если параметр имеет значение от 0 до 7, то выбирается нулевая строка таблицы (коэффициент 0), если от 8 до 15, то первая (коэффициент 1) и т. д. Таким образом, хотя диапазон изменения параметра лежит в пределах от 0 до 127, реально имеется всего 16 вариантов настроек резонансного фильтра.

Смена типа реверберации и хоруса при помощи MIDI-сообщений

Управление эффект-процессором звуковых карт семейства AWE соответствует стандарту GS. Благодаря этому существует возможность изменения типа (вариации) эффектов реверберации и хоруса при воспроизведении MIDI-файла. Если говорить более конкретно, то это делается при помощи макросов привилегированных системных сообщений (System Exclusive Message). С тем, как использовать макросы в дальнейшем, мы познакомим вас на примере переключения вариаций эффектов в редакторе Cakewalk.

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

Таблица 3.5. Макрос системных сообщений для смены типа реверберации
Номер байта в макросе Шестнадцатеричное значение Десятичное значение
1 FO 240
2 41 65
3 10 16
4 42 66
5 12 18
6 40 64
7 1 1
8 30 48
9 номер вариации см. в табл. 3.6  
10 0 0
11 F7 247

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

Девятым байтом в макросе идет номер вариации реверберации. О том, какие эффекты доступны, вы можете узнать из табл. 3.6.

Смена типа хоруса (табл. 3.7) осуществляется почти так же, как и смена реверберации. Отличие заключается в восьмом байте. В макросе смены реверберации восьмой байт равен 30h (или 48), а в макросе смены хоруса - 38h (или 56).

Теперь рассмотрим, как реализовать на практике переключение вариаций эффектов с помощью редактора Cakewalk. Выполните команду View > Sysx.
Таблица 3.6. Типы эффектов реверберации
Номер вариации Название эффекта Комментарии
0 Room 1 Эта группа вариаций создаёт
1 Room 2 ощущение присутствия в комнатах разных размеров
2 Room 3 от маленькой до большой
3 Hall 1 Создаёт ощущение присутствия в
4 Hall 2 маленьком и большом концертных залах
5 Plate Реверберация с металлическим оттенком
6 Delay Задержка
7 Panning Delay Панорамируемая влево и вправо задержка

Таблица 3.7. Макрос системных сообщений для смены типа хоруса
Номер байта в макросе Шестнадцатеричное значение Десятичное значение
1 FO 240
2 41 65
3 10 16
4 42 66
5 12 18
6 40 64
7 1 1
8 38 56
9 номер вариации см. в табл. 3.8  
10 0 0
11 F7 247
Появится окно диалога для редактирования макросов системных сообщений.

Это окно содержит пока незаполненный список макросов и кнопки для выполнения операций с ними. Начнем со списка. Под заголовком Bank расположены номера банков системных сообщений (макросов), Name - названия макросов, Length - длина (количество байт в макросе), Auto - включен ли или нет режим автоматического выполнения макросов сразу после загрузки сонга, Port - MIDI-устройство, для которого предназначен макрос.

Сделаем так, чтобы нулевой макрос содержал байты для установки нулевой вариации реверберации (Room 1). Щелкните по первой строке списка (Bank 0) два раза мышью или нажмите кнопку Edit Bytes. В появившемся окне Edit System Exclusive Bytes введите макрос для смены эффекта реверберации.

Таблица 3.8. Типы эффектов хоруса
Номер вариации Название эффекта Комментарии
0 Chorus 1  
1 Chorus 2 Эффект хоруса становится более заметным с
2 Chorus 3 увеличением номера вариации
3 Chorus 4  
4 Feedback Chorus Похож на свист возникающий в результате рассекания воздуха
5 Flanger Флэнжер
6 Short Delay Короткое повторяющееся эхо
7 Short Delay (Feedback) Короткое многократно повторяющееся эхо

После этого нажмите кнопку ОК или клавишу . Теперь макросу можно присвоить имя. В окне Sysex нажмите кнопку Name. В появившемся окне диалога введите название макроса, например, Reverb "Room 1". Аналогичную операцию можно проделать для всех вариации эффектов реверберации и хоруса.

В заключение отметим, что вариации эффектов устанавливаются одновременно для всех MIDI-каналов. Не может быть, например, так, что на первом канале была установлена реверберация "Panning Delay", а на втором - "Plate". По этой причине совершенно безразлично, на каком треке будут размещены сообщения для смены вариаций эффектов. Это неудобство вызвано тем, что возможности звуковых карт семейства AWE не безграничны. А расширить диапазон этих возможностей можно только с помощью звуковой карты стандарта XG.

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


 Bash.org.ru:

 Реклама:

 ©Copyright:
http://www.last.h16.ru - программирование миди. Идея, разработка и поддержка : Mo-skin © 2006-2007
X