Работа в Logical Editor Работа над музыкальной композицией — это не только творчество. Приходится также выполнять массу рутинных операций, отнимающих много сил. Особо нудным занятием является редактирование однотипных параметров серии однотипных 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, и группа команд, связанных с квантизацией. |