Работа над музыкальной композицией —
это не только творчество. Приходится также выполнять массу рутинных
операций, отнимающих много сил. Особо нудным занятием является
редактирование однотипных параметров серии однотипных MIDI-сообщений.
То нужно найти все ноты с определенным номером для того, чтобы затем
отредактировать какой-либо из их параметров; то нужно, избавляясь от
огрехов исполнения, удалить случайные ноты (как правило, очень короткие
или очень тихие); то нужно транспонировать часть нот; то нужно удалить
из списка сообщения определенного типа. Композиций у вас много, да все
они содержат не по одному десятку треков, а сообщений на них — не
сосчитать. Сколько драгоценного времени может уйти на подобную работу!
Нечто похожее наблюдается в математике, когда приходится, например, для
получения графика тысячи раз повторять вычисления по одной и той же
формуле, подставляя различные исходные данные. Математики давно
изобрели способ облегчения своей и нашей жизни —
программирование. Программист один раз пишет последовательность команд,
а многократное их выполнение возлагает на вычислительную машину. В
основе такого подхода лежит один из языков программирования,
обеспечивающий перевод инструкций, формулируемых в удобном для человека
виде, в код, понятный машине. Многие Windows-приложения содержат в себе
встроенные языки программирования, позволяющие автоматизировать
повторяющиеся операции и расширить функциональные возможности
приложения. Так, например, в программе Cakewalk SONAR имеется
встроенный язык CAL, позволяющий писать достаточно сложные программы
обработки MIDI-данных. С нашей точки зрения, Logical Editor также можно
рассматривать как графическое средство доступа к языку программирования
последовательности операций с MIDI-сообще-ниями. Пожалуй, от типичных
средств редактирования содержания компьютерных программ Logical Editor
отличается лишь относительной простотой да еще формой составления
программ. При работе с Logical Editor вам не потребуется вести
посимвольную запись операторов программы. Вы их будете выбирать из
числа тех, что предлагаются в меню и в списках.
В названии редактора слово "логический" присутствует не случайно. Ведь суть работы с Logical Editor состоит в следующем:
1. Вы задаете признаки, по которым программа должна выявить
определенные MIDl-сообщения. Критерии поиска формулируются как
совокупность логических условий. Например, на обычном человеческом
языке это может выглядеть так: "Найти все MIDl-сообщения типа Note, для
которых Velocity < 10".
2. Вы указываете программе
последовательность действий, которые она должна выполнить по отношению
к выявленным сообщениям. Например: "Удалить".
3. Вы определяете
область, в пределах которой программа должна выполнять ваше задание.
Например, выделяете часть на MIDI-треке.
Иными словами, в работе с редактором вы постоянно используете логические условия.
Вообще говоря, в математике существует обширный раздел, который так и
называется "Логика". Одной из задач логики является исследование
эффективных способов построения сложных логических высказываний на
основе элементарных логических операторов. Среди различных логических
систем особое место занимает двоичная (булева) логика, в которой и
исходные объекты и результаты их обработки принимают только два
значения. Обычно эти значения обозначаются как 0 и 1, или как ЛОЖЬ
(FALSE) и ИСТИНА (TRUE). В частности, доказано, что самые сложные
отношения между объектами (условия) могут быть выражены на основе
суперпозиции всего лишь двух элементарных логических функций
(операторов). Разработчики Logical Editor выполнили это условие с
избытком: в качестве таких операторов выбраны три функции: NOT, AND и
OR. Функции AND и OR присутствуют в явном виде, они так и обозначены:
AND и OR. Функции NOT в явном виде вы здесь не найдете, но фактически,
выбирая одно из двух условий Equal или Unequal, вы будете иметь дело
именно с ней.
NOT — функция одной переменной. Она принимает значение 1, когда переменная равна 0, и 0, когда переменная равна 1.
Остальные логические функции позволяют работать с различным числом
логических переменных. Для функций AND и OR минимальное количество
переменных равно двум. Логические функции задаются в виде таблиц
истинности. В табл. 6.1 приведена таблица истинности функции AND, а в
табл. 6.2 — функции OR.
Таблица 6.1. Функция AND
Х2\Х,
0
1
0
0
0
1
0
1
Таблица 6.2. Функция OR
Х2\Х,
0
1
1
1
1
1
1
1
В верхней строке каждой таблицы приведены значения первой логической
переменной (\i). В левом столбце — значения второй логической
переменной (х2). На пересечении строки и столбца записан результат
операции. Например, (1 AND 0) = 0, (1 AND 1) = 1, (0 OR 1) = 1
Словами табл. 6.1 можно описать так: в результате операции AND
получится ИСТИНА, только в том случае, если обе переменные (х1 и х2)
принимают значение ИСТИНА.
Смысл табл. 6.2 иной: в результате
операции OR получится ИСТИНА, в том случае, если хотя бы одна из
переменных (x1 или х2) принимает значение ИСТИНА.
Возможно,
некоторым музыкантам и это легкое прикосновение к математике покажется
слишком сложным. Но если вы хотите научиться пользоваться Logical
Editor, то ничего не поделаешь, без понимания хотя бы элементарных
вещей не обойтись. Ведь именно путем построения цепочки логических
операторов вам предстоит объяснять программе задачу, которую вы ей
ставите. Известная программистская мудрость гласит: "Что
запрограммируешь, то и получишь". Не хотелось бы, чтобы, применяя
Logical Editor, вместо удовольствия от работы, вы получали неожиданные
неприятности.
Окно Logical Editor (рис. 6.31) открывается командой MIDI > Open Logical Editor.
С помощью Logical Editor определяются параметры поиска и преобразования
MIDI-сообшений, записанных в части на MIDI-треке. Возможные варианты
действий:
* преобразование свойств найденных сообщений;
* удаление найденных сообщений;
* вставка новых сообщений, параметры которых определенным образом связаны с найденными сообщениями.
В окне Logical Editor имеется два рабочих поля: в верхнем (столбцы (, Filter Target, Condition, Parameter 1, Parameter 2, Bar Range, ), bool) определяются условия фильтрации.
Рис. 6.31. Окно Logical Editor
В нижнем рабочем поле (столбцы Action Target, Operation, Parameter
1,Parameter 2) определяются параметры преобразования MIDI-сообщения.
Напротив каждого из рабочих полей имеется пара кнопок: Add Line
(добавить строку в список на рабочем поле) и Delete Line (удалить
строку из списка на рабочем поле).
В строках верхнего рабочего
поля вам предстоит набирать программу, согласно которой будет
проводиться выявление сообщений, характеризующихся определенными
признаками. В строках нижнего рабочего поля предстоит формулировать
конкретное задание для Logical Editor, т. е. указывать действия,
которые должны быть выполнены в отношении выявленных сообщений.
Рабочие поля можно сравнить с двумя разграфленными листками
обыкновенного блокнота. На первом вы составляете описание какого-либо
объекта (например, "женщина, молодая, красивая"), а на втором пишете,
что нужно будет с таким объектом сделать, если он вам встретится
(например, "познакомиться").
Оба рабочих поля понадобятся вам не
всегда. Если, допустим, требуется удалить определенные сообщения, то
такая операция программируется без использования нижнего рабочего поля.
Однако когда вы соберетесь преобразовать сообщения, то необходимо будет
определить, какие свойства должны быть изменены и каким именно образом.
Задача логическому редактору в общем виде формулируется путем
выбора одной из строк в раскрывающемся списке, который расположен в
левом верхнем углу окна Logical Editor:
* Delete — удалить найденные сообщения;
* Transform — преобразовать сообщения;
* Insert — вставить сообщения, найденные в соответствии с заданными условиями;
* Insert Exclusive — вставить сообщения за исключением найденных в соответствии с заданными условиями;
* Сору — копировать сообщения, преобразовать их согласно заданным условиям и вставить на другой трек;
* Extract — извлечь найденные сообщения и вставить их на другой трек;
* Select — выделить найденные сообщения с тем, чтобы вы могли продолжить работу с ними в другом редакторе.
В поле, расположенном справа, содержатся пояснения к выбранной задаче преобразования.
Разработчики утверждают, что средствами Logical Editor можно выполнить
преобразования любой сложности. И это очень похоже на правду. Во всяком
случае, количество различных вариантов преобразований подсчитать очень
трудно. Никому из нас не удалось бы перебрать их и за всю свою жизнь.
Logical Editor, как и любое устройство, логика которого построена не по
жесткой схеме, а программируется, сам может считаться объектом
творчества. Поэтому бессмысленно пытаться обучать вас выполнению 5, 10,
20 конкретных преобразований. Все, чем мы можем вам помочь в освоении
Logical Editor, так это разъяснить общие принципы его применения. Вот и
продолжим это занятие.
Рассмотрим использование окна Logical
Editor на примере одного из пресетов. Откроем список Presets и выберем
пресет standard set 2 > del patch changes. Судя по названию, пресет
предназначен для удаления из списка сообщений о смене MIDI-инструмента.
Программа преобразований загрузилась в Logical Editor. Посмотрим, как это отразилось на содержании окна (рис. 6.32).
В безымянном раскрывающемся списке, расположенном в верхнем левом углу
окна, появилась надпись Delete. Значит, сообщения действительно будут
удаляться. Справа в поле комментария содержится пояснение о том, что
будут удалены все сообщения, удовлетворяющие условиям фильтрации.
Условие фильтрации набрано в верхнем рабочем поле. Но здесь трудно
охватить запись взглядом. Поэтому для справки соответствующее
логическое выражение приведено и в информационной строке, расположенной
чуть ниже. В данном случае условие выглядит следующим образом:
( Туре = Program OR ( Type = Controller AND ( Valuel = 0 OR Valuel = 32 ) ))
Попробуем расшифровать эту запись. Начнем с пары внешних скобок —
( и ). Они служат признаками начала и конца логического оператора,
определяющего условия фильтрации. Сообщения каких типов будут удалены?
Или типа Program Change (см. выражение Туре = Program), или типа
Controller (см. выражение Туре = Controller). О том, что именно "или
— или", свидетельствует первый слева оператор OR. Все ли
сообщения типа Controller будут удалены? Нет, не все, а только те,
которые, будучи сообщениями данного типа, одновременно удовлетворяют
дополнительным условиям: имеют значения своего параметра, равные или 0,
или 32. Об этом свидетельствует выражение (Туре = Controller AND (
Valuel = О OR Valuel — 32 )). Как известно, контроллер № 0
— это BankSel LSB (младший байт сообщения о выборе банка), а
контроллер № 32 — это BankSel MSB (старший байт сообщения о
выборе банка). Итак, действительно, в рассмотренном условии
запрограммировано удаление всех возможных сообщений, связанных со
сменой MIDI-инструмента. Даже предусмотрен тот факт, что в различных
MIDI-спецификациях предусмотрены различные способы адресации банка.
Рис. 6.32. Окно Logical Editor с загруженным пресетом del patch changes
Рис. 6.33. Верхнее рабочее поле с введенным условием преобразования
Теперь рассмотрим внимательнее верхнее рабочее поле (рис. 6.33) с тем,
чтобы понять, каким образом только что проанализированное условие
оказалось там записанным.
Содержание условия следует читать слева
направо и сверху вниз, как мы обычно читаем книгу. Немного сбивают с
толку длинные пробелы между некоторыми элементами, но со временем к
этому можно привыкнуть.
Верхняя строка содержит заголовки
столбцов. Они одновременно являются названиями списков, раскрывающихся
двойным щелчком на соответствующей ячейке.
Получается следующее:
* в одной строке можно записать некоторое выражение, заключенное в
скобки. Количество скобок в пределах от 0 до 3 выбирается в ячейках ( и
). Cubase SX автоматически проверяет выполнение правил
синтаксиса, присущих для данного языка программирования. Одно из них
заключается в том, что количество закрывающих скобок должно быть равно
количеству открывающих;
* в ячейке столбца bool можно записать один из двух логических операторов (Оr или And).
Выражение, записанное в строке, может состоять из следующих компонентов.
1. Filter Target — признак (объект) фильтрации. Выбор
осуществляется из вариантов: Type Is (по типу сообщения); Position (по
позиции сообщения); Length (по длине сообщения); Value 1 (по значению
первого параметра сообщения); Value 2 (по значению второго параметра
сообщения); Channel (по MIDI-каналу); Property (по атрибуту сообщения
— muted, selected, locked); Value 3 (по значению третьего
параметра сообщения).
2. Condition — условие фильтрации
(состояние признака фильтрации). Выбор осуществляется из вариантов,
число и смысл которых зависит от объекта фильтрации, выбранного в
столбце Filter Target. Например, для объекта Channel такими вариантами
будут: Equal (равно), Unequal (неравно), Bigger (больше), Bigger or
Equal (больше или равно), Less (меньше), Less or Equal (меньше или
равно), Inside Range (находится в заданном диапазоне), Outside Range
(находится вне заданного диапазона).
3. Parameter 1, Parameter 2 — значения параметров.
4. Ваr Range — временной диапазон поиска сообщений в пределах
каждого такта. Столбец доступен только в том случае, когда в столбце
Filter Target выбран объект Position, а в столбце Condition —
признаки Inside Bar Range или Outside Bar Range.
Итак, для
составления программы поиска и преобразований сообщений необходимо
путем выбора элементов в раскрывающихся списках заполнять ячейки в
строках верхнего и нижнего рабочих полей.
Для применения Logical Editor нажмите кнопку Do It.
Хотим предупредить, что в ходе подготовки материала данного раздела мы
изредка сталкивались с неприятным явлением. В ряде случаев на выбор в
Logical Editor недопустимого сочетания параметров программа Cubase SX реагировала еще более недопустимым, на наш взгляд, образом: сообщала об ошибке и тут же закрывалась с потерей всех данных.
Не станем углубляться дальше. Не очень верится в то, что вы всерьез
займетесь разработкой собственных алгоритмов для Logical Editor
(особенно если не обладаете соответствующей подготовкой в области
программирования). А вот разобраться в смысле преобразований, которые
сохранены создателями Cubase SX в виде пресетов, вам теперь
вполне по силам. Там вы обнаружите очень полезные вещи. Советуем вам в
свободное время поэкспериментировать с содержимым раскрывающегося
списка Presets, применяя пресеты для обработки какого-либо несложного и
хорошо знакомого вам материала. Кстати говоря, списки пресетов Logical
Editor содержатся также и в системе подменю, которые открываются
командой MIDI > Logical Presets.
Напомним, что в разд. 4.1.2
рассмотрен пример применения для преобразования MIDI-сообщений окна
Input Transformer, которое очень похоже на окно Logical Editor. Разница
заключается в том, что окно Input Transformer предназначено для
редактирования параметров фильтрации и преобразования MIDI-данных в
реальном времени, а с помощью окна Logical Editor осуществляется
фильтрация и преобразование MIDI-данных, уже сохраненных на треке.
Кроме того, в Cubase SX имеется работающий в режиме реального времени MIDI-плагин Transform, который является полным аналогом Logical Editor.
Те команды и функции, которые применяются в процессе редактирования
MIDI-сообщений, сосредоточены в меню MIDI. В предыдущих разделах
текущей главы мы уже обращались к командам, открывающим различные
MIDI-редакторы (за исключением Score Editor — этот редактор мы
рассмотрим в главе 7). С работой в окне Drum Map Setup, которое
открывается командой MIDI > Drum Map Setup, мы познакомили вас в
разд. 4.1.2. За пределами нашего повествования пока остались функции,
доступные в подменю MIDI > Functions, и группа команд, связанных с
квантизацией.
Применение квантизации
В самом общем смысле суть квантизации
состоит в привязке начальных моментов MIDI-сообщений и/или их
протяженности во времени к выбранной дискретной сетке. Перечислим
наиболее распространенные задачи квантизации.
1. Выравнивание неточно сыгранной последовательности нот по заданным долям такта.
2. Преобразование ритмической структуры обрабатываемой партии в соответствии с образцовой партией.
3. Внесение небольших "случайных" отклонений моментов взятия нот и их
длительностей от идеально равномерной тактовой сетки. Такая обработка
имитирует игру исполнителя-человека и позволяет избавиться от
впечатления навязчивой механистичности в звучании партий, созданных с
помощью MIDI-секвенсора.
В Cubase SX предусмотрено много
различных алгоритмов квантизации. Перед тем как перейти к их анализу,
рассмотрим команду Quantize Setup, которой открывается диалоговое окно
Quantize Setup, предназначенное для выбора параметров квантизации.
Выбор параметров квантизации
Итак, откроем диалоговое окно Quantize Setup (рис. 6.34) и рассмотрим его содержание.
Рис. 6.34. Диалоговое окно Quantize Setup
В средней части окна расположено поле (Grid Display), в котором (в
пределах одного такта) наглядно отображается сетка квантизации и те
изменения, которые происходят с ней при выборе различных значений
параметров и алгоритмов квантизации.
В верхней части окна
находится группа Grid Quantize, элементы которой предназначены для
установки сетки квантизации — положения на оси времени тех точек,
к которым в результате квантизации будут привязываться сообщения. В
группу входят:
1. Раскрывающийся список Grid, в котором выбирают
основной шаг квантизации в пределах от целой до стодвадцатьвосьмой
длительности.
2. Раскрывающийся список Туре, предназначенный для перехода:
* к пунктирной длительности (Dotted — удлинение шага квантизации
на половину основной длительности, в нотной записи такие длительности
обозначаются как "нота с точкой");
* к длительности, позволяющей образовывать триоли (Triplet — деление основной длительности не на две части, а на три).
Еще большую гибкость в вопросе выбора шага квантизации даст вам поле
ввода Tuplet. С его помощью такт и основные доли такта можно разделить
на любое количество частей. Это позволяет формировать любые
триолеобразные ритмические фигуры, базирующиеся на квинтолях (рис.
6.35), секстолях, септолях и т. д.
С помощью слайдера Swing можно
сместить каждый второй узел сетки квантизации относительно его обычного
положения (рис. 6.36). При воспроизведении квантизированной таким
образом музыки действительно возникает ощущение свинга.
Слайдер
Magnetic Area позволяет определить в окрестностях узлов сетки
квантизации размер тех областей (рис. 6.37), в пределах которых
квантизация будет оказывать влияние на ноты ("притягивать" их к узлам).
Ноты, находящиеся вне Magnetic Area, могут быть не затронуты
квантизацией. Это также служит разрушению ощущения монотонности в
образе идеально ровной MIDI-музыки. Область захвата отображается на
поле Grid Display в виде голубых прямоугольников, длина каждого из
которых пропорциональна значению Magnetic Area.
Рис. 6.35. Такт разделен сеткой квантизации на 5 частей
Рис. 6.36. Пример сетки квантизации, Grid = 1/8, Swing = 50 %
Рис. 6.37. Пример сетки квантизации, Grid = 1/8, Magnetic Area = 20%
А вот в поле Non Quantize можно ввести в тиках ширину области, в
пределах которой квантизация, наоборот, не будет оказывать влияния на
ноты. Это, с одной стороны, позволит сохранить небольшие отклонения от
равномерной игры, которые как раз и являются одним из признаков стиля
музыканта-профессионала, а с другой стороны, позволит устранять грубые
исполнительские ошибки. Напомним, что в Cubase SX на четвертную длительность приходится 120 тиков.
Если в поле Random Quantize ввести ненулевое значение (в тиках), то
сообщения будут квантизироваться к случайным позициям в пределах
указанного "расстояния" от сетки квантизации.
В поле Iterative
Strength в процентах вводится параметр, определяющий область действия
алгоритма квантизации, который приводится в действие командой MIDI >
Iterative Quantize (ее мы охарактеризуем чуть позже).
Обращаем
ваше внимание на то, что любые изменения сетки квантизации, выполненные
в диалоговом окне Quantize Setup, немедленно находят отражение в окне
Key Editor: изменяется "густота" вертикальных линий сетки в правой
секции. Кроме того, изменение параметров Grid, Type и Tuplet мгновенно
отображается также в поле Quantize, имеющемся в окнах Key Editor и List
Editor. А вот для того чтобы применить установленную квантизацию к
MlDI-сообщениям, записанным на треке в выделенной части, нужно нажать
кнопку Apply.
Суть различных алгоритмов квантизации
После того как вы выбрали
параметры квантизации, можно применять ее на практике. Доступ к
соответствующим командам осуществляется либо из контекстного меню, либо
из меню MIDI.
Непосредственно в меню MIDI (или в подменю MIDI контекстного меню) имеются 2 команды квантизации:
* Over Quantize — произвести полную квантизацию моментов
наступления событий в соответствии с сеткой квантизации, выбранной в
раскрывающемся списке Quantize окна Key Editor;
* Iterative
Quantize — выполнить итеративную (приближенную) квантизацию, при
которой начальные моменты событий переместятся не точно в узлы сетки
квантизации, а в некоторую их окрестность, ширина которой определяется
значением параметра Iterative Strength (выбирается в окне диалога
Quantize Setup).
Кроме того, в подменю Advanced Quantize
содержатся 4 дополнительные команды, относящиеся к квантизации.
Рассмотрим суть каждой из них.
1. Quantize Lengths —
выполнять квантизацию только продолжительности событий, не затрагивая
их начальные моменты. Команда доступна только при открытых окнах
редакторов Key Editor или List Editor.
2. Quantize Ends — выполнять квантизацию только моментов окончания событий.
3. Undo Quantize — отменить ранее выполненную квантизацию. Данная
команда в отличие от отмен, которые выполняются командой Edit >
Undo, оказывает влияние только на операции квантизации, не затрагивая
другие разновидности редактирования. Вместе с тем, применение Undo
Quantize отображается в предыстории редактирования окна Edit History.
4. Freeze Quantize — стереть из предыстории квантизации
информацию о первоначальных положениях и протяженности событий. После
применения данной команды к выделенным сообщениям их текущие положения
и длительности программа будет считать исходными. Если ранее
квантизация не выполнялась, то команда не окажет никакого влияния. Если
квантизация имела место, то после применения команды MIDI > Advanced
Quantize > Freeze Quantize не будет действовать команда MIDI >
Advanced Quantize > Undo Quantize. Однако и в последнем случае
отменить квантизацию все-таки можно. Для этого следует воспользоваться
командой Edit > Undo.
Обилие алгоритмов квантизации —
это то, чем всегда гордились поклонники музыкальных редакторов, в
именах которых имеется слово "Cubase". Суть этих алгоритмов за
долгие годы не претерпела значительных изменений. Поэтому при желании
вы сможете найти их подробное описание в книгах, посвященных ранним
версиям программы Cubase. Мы же на этом завершаем тему квантизации.
В заключение хочется обратить ваше внимание только на одно
обстоятельство. Квантизацию можно отнести к тем средствам программы,
которые позволяют в автоматическом режиме выполнять одновременную
обработку большого количества сообщений в соответствии с заданным
алгоритмом. Это может помогать в работе, но только в том случае, когда
вы хорошо представляете себе, что получится в ее результате при
различных начальных условиях. Поэтому советуем вам вводить в свою
практику различные приемы квантизации постепенно, после того, как на
понятных вам примерах вы испытаете их в действии.
Применение команд меню MIDI
В меню MIDI имеются следующие команды: Transpose..., Merge MIDI in Loop, Dissolve Part, O-Note Conversion и Reset.
Командой Reset вы можете послать синтезатору сигнал сброса
MIDI-контроллеров в состояние по умолчанию. Такая необходимость
возникает чаще всего в тех случаях, когда происходит случайное
"подвисание" ноты: сообщение Note On прошло, a Note Off — нет.
Остальные команды требуют чуть более подробного пояснения.