Привет, котаны!
Сегодня я покажу вам немного секвенсорной магии.
Многие знают, что есть такой секвенсор как Cubase. Часть из вас даже знает, что такое MIDI, и что Cubase предоставляет довольно удобные стредства для работы с этими данными. Но лишь единицы знают, что в числе этих инструментов есть такая замечательная штука как Logical Editor. И вот работа с ним всегда вызывала массу вопросов.
В общих чертах.Итак. Что же из себя представляет Logical Editor? Это инструмент, который позволяет делать выборку из сообщений на MIDI-треке, а потом выполнять над ними различные операции, например, изменить velosity, или удалить сообщения, которые не подходят по параметрам.
Зачем это нужно? Logical Editor, как и многие другие инструменты в Cubase, может сохранять и использовать пресеты. Таким образом, один раз описав нужную операцию, потом её можно использовать сколько угодно раз. Это сильно экономит время на рутинных операциях.
Почему "логический редактор"? Это название пошло из того факта, что условие выборки нужных событий задаётся как логическое выражение. Увы, но нам придётся немного обратиться к математике, чтобы понять, как оно работает.
Чтобы понятней было, к чему следующие несколько абзацев математики, приведу пример:
Если velosity ноты больше 100 ИЛИ меньше 20, то удаляем эту ноту. Это реальный пример задачи для редактора. И тут используется описанная ниже математика.
Есть такое понятие, как математическая логика. Если совсем в общих чертах, то это раздел математики, который оперирует двумя сущностями: Истина и Ложь. И позволяет комбинировать эти сущности в выражения с помощью условий "И", "ИЛИ".
Всё понятно? Правда?
![:crazy:](https://guitarplayer.ru/Smileys/classic/crazy.gif)
Ладно, объясню человеческим языком. Есть логика обычная - "У фотографа есть фотоаппарат. Значит каждый, у кого есть фотоаппарат - это фотограф". Вот яркий пример классической (её ещё называют Аристотелевой) логики. Вроде бы все утверждения верны, но что-то явно не то.
![Подмигиваю ;)](https://guitarplayer.ru/Smileys/classic/wink.gif)
Так вот в нашем случае мы польуемся математической логикой. Она отличается тем, что подобные вольности не допускает.
Работаем мы с
логическими выражениями (это утверждения, про которые мы можем сказать верны ли они или нет). Например, (2 < 3). Мы однозначно можем сказать, что два меньше трёх. Значит этот операнд в логическом выражении равен Истине или 1. Но если мы запишем его как (2 > 3), то это выражение уже перестанет быть верным, т.к. два не больше трёх. Значит такой операнд у нас будет иметь значение Ложь или 0.
И работаем мы с
логическими функциями. "И", "ИЛИ" и другие. Их называют булевыми функциями (по имени одного математика).
Функции выглядят как-то так: "Если два меньше трёх И пять больше двух, то значит наше условие верно (Истинно)". Довольно непонятная запись. Поэтому используются формулы:
(2 < 3) И (5 > 2) -> ИстинаОт двух аргументов есть 4 логические функции. Нам понадобятся только две: "И" и "ИЛИ". Стоит заметить, что в математической логике принимают, что Истина выражается единицей, а Ложь - нулём.
Аргументы, они же
операнды - это логические выражения, с которыми работают булевы функции.
На основе этого мы можем описать наши функции:
И - выражение будет истинно тогда и только тогда, когда истинны оба операнда.
Выглядит как
"А И Б"Это можно описать таблицей (А и Б - это операнды):
А Б Результат0 0 0
1 0 0
0 1 0
1 1 1
ИЛИ - выражение будет истинным когда хотя бы один из операндов является истинным утверждением.
Выглядит как
"А ИЛИ Б":
А Б Результат0 0 0
1 0 1
0 1 1
1 1 1
Вернёмся к нашему примеру:
Если velosity ноты больше 100 ИЛИ меньше 20, то удаляем эту ноту.
Тут мы использовали функцию ИЛИ. И два операнда: А = (velosity > 100), Б = (velosity < 20).
Значит можем записать выражение формулой:
(velosity > 100) ИЛИ (velosity < 20)Но так как Cubase - это англоязычная программа, то вместо "И" и "ИЛИ" используются "AND" и "OR" соответственно.
Тогда наша формула выглядит так:
(velosity > 100) OR (velosity < 20)И как же с этими условиями работает Logical Editor? Он просто проходит по каждой ноте и проверяет её на заданные условия. Например есть нота с velosity равной 50 и нота с velosity равной 127. Тогда первую ноту редактор пропустит, а вторую обработает.
Рассмотрим подробнее:
Первая нота: velosity = 50.
Смотрим наши условия с этой нотой:
А:
(velosity > 100)
(50 > 100)Видим, что условие А ложно. Значит А = 0.
Б:
(velosity < 20)
(50 < 20)Видим, что условие Б тоже ложно. Значит Б = 0.
Обращаемся к нашей таблице для функции ИЛИ:
А ИЛИ Б
0 ИЛИ 0 -> 0Значит первая нота не подходит нам. Редактор её пропускает.
Теперь
вторая нотаА:
(velosity > 100)
(127 > 100)Видим, что условие А истинно. Значит А = 1.
Б:
(velosity < 20)
(127 < 20)Видим, что условие Б ложно. Значит Б = 0.
Обращаемся к нашей таблице для функции ИЛИ:
А ИЛИ Б
1 ИЛИ 0 -> 1Значит эта нота нам подходит и мы её редактор обработает.
Кроме того, условия можно группировать с помощью скобок. Например:
((А И Б) ИЛИ В)Тогда сначала определяется значение выражение (А И Б), а потом его результат подставляется в выражение с В.
Именно так и работает Logical Editor. Теперь, зная это, мы можем перейти к самому редактору.
Устройство.Редактор работает на самом деле не с нотами, как я писал выше, а с любыми MIDI-событиями (ноты, смена программы, контроллеры и т.п.). Устройство MIDI я тут расписывать не буду. Кому интересно, можете почитать. Но одно могу сказать, для продуктивной работы с редактором, нужно понимать, что из себя представляют MIDI-сообщения.
![Logical Editor в Cubase 982559-0](https://guitarplayer.ru/attach/293032-982559.jpg)
Редактор делится на три зоны:
1) Первая зона - это то условие, по которому происходит выборка событиями. Именно тут нам понадобится то, что я описал выше.
2) Вторая зона - это описание преобразования.
3) Третья зона - это список, в котором можно выбрать операцию, которая производится над выбранными сообщениями.
Блок условийБлок условий - это таблица, в которой мы можем задать условия, по которым выбираются ноты для обработки.
![Logical Editor в Cubase 982561-1](https://guitarplayer.ru/attach/293032-982561.jpg)
Каждая строка таблицы имеет слдующие поля:
"
(" - открывающая скобка. Выше я писал, как используются скобки в логических выражениях. Logical Editor позволяет работать с тремя уровнями вложенности. В конце статьи я приведу пример работы со скобками.
"
Filter Target" - это цель, к которой применяется условие. Поддерживаются следующие цели:
- Position - позиция события.
- Length - длина события.
- Value 1 - это первое значение событие. Чтобы понять, нужно вспомнить, как устроены MIDI-сообщения. Например, у события Note On первым значеним идёт сама ноты (ми второй октавы), а вторым значенем - velosity. Для события смены программы первым событием будет номер программы. И т.п.
- Value 2 - второе значение события. Я выше писал. Для ноты это будет её velosity.
- Channel - MIDI-канал события.
- Type - тип события (Note, Controller, Pitchbend, SysEx и т.д.).
- Property - свойство события (Selected, Muted)
- Value 3 - аналогично с Value 1 и Value 2.
- Last Event - тут я не совсем понял. Но эта штука позволяет работать со счётчиком, что просто незаменимо.
"
Condition" - это условие, по которому проверяется то, что мы указали в Filter Target. Есть как простые условия - Equal/Unequal (равно/не равно), Bigget/Less (больше/меньше), так и более сложные, котоыре зависят Filter Target. Так, мы для Position можем указать условие по промежутку, заданному в выбранных единицах времени. Или везде кроме выбранных тактов. Или внутри маркетов. А для типа события Property можем вообще применить операцию только к тем нотам, которые выбрали мышкой!
Ну и для фильтра Last Event есть удобное условие Every other Event, которому можно задать счётчик (см. ниже).
"
Parameter 1", "
Parameter 2" - это параметры, которые задают условия фильтрации. Зависят от Fiter Target и Condition. Несколько примеров:
- Type Is, Equal. Тогда Parameter 1 - это тип события, а Parameter 2 не используется. Так мы выберем все события заданного типа.
- Position, Inside Bar Range. Тут Parametet 1 - это номер такта, с которого начинается обрабатываемый отрезок, а Parameter 2 - это номер последнеие такта отрезка. Так мы выберем все события, которые расположены между указанными тактами.
- Property, Property Is Set. Тут Parameter 1 - это имя свойства. Если выбрать Event Selected, то редактор будет работать только с выбранными событиями.
- Last Event, Every other Event. Если установить Parameter 1 в значение Eventcounter, то Parameter 2 будет принимать число. Если укажем 2, то тогда мы выберем каждое второе событие.
"
Bar range/Time Base" - для условий, которые работают с позицией, мы тут можем задать либо промежуток в тактах мышкой, либо тип времени (PPQ, second, samples, frames)
"
)" - закрывающая скобка
"
bool" - булева функция, которая работает между двумя соседними строками условий.
Для нашего первого примера (velosity > 100) OR (velosity < 20) условие в блоке условий будет выглядеть так:
Описание преобразованияВ ряде случаев мы можем указать, как будут преобразованы выбранные ноты. Например, если мы указываем операцию Transform в блоке выбора функции (об этом ниже).
Это тоже таблица, в которой мы можем задать несколько преобразований. Преобразования будут проводиться над теми нотами, которые подойдут по условиям, заданным в блоке условий.
![Logical Editor в Cubase 982565-3](https://guitarplayer.ru/attach/293032-982565.jpg)
Тут мы видим следующие поля:
"
Action Target" - цель преобразования. Значения аналогичны значениям Filter Target
"
Operation" - тип преобразования. Ниже я опишу некоторые возможные преобразования и их параметры:
- Add -добавить Parameter 1 к текущему значению.
- Subtrat - отнять Parameter 1 от текущего значения.
- Multiple By - умножить текущее значение на Parameter 1.
- Divide By - разделить текущее значение на Parameter 1.
- Round By - округлить значение. В Parameter 1 указывается шаг округления. Так 123 при щаге округления в 10 округлится до 120
- Set Random Value between - задать случайное значение из диапазона. Parameter 1 и Parameter 2 указывают границы диапазона значений, которое может принимать параметр.
- Set to Fixed Value - установить фиксированное значение, которое задано в Parameter 1.
- Set relative Random Values between - задать относительное случайное значение. Т.е если мы укажем -10 и 10, то к нашему значению либо прибавится число от 1 до 10, либо отнимется число от 1 до 10, либо значение вообще не изменится.
Есть ещё функции, которые зависят от Action Target. Из названия, в принципе, понятно, что они делают. А если непонятно, можно потыкать мышкой. Если всё ещё непонятно, значит оно вам и не нужно.
Операция, применяемая к выбранным сообщениямВ этом списке мы можем выбрать одну из семи операций:
![Logical Editor в Cubase](https://guitarplayer.ru/attach/293032-982567.jpg)
- Delete - удалить найденные сообщения. В этом случае нам не нужен блок описания преобразования. Редактор выберет события согласно условиям и удалит их.
- Transform - преобразовать сообщения. Выбранные по условиям сообщения будут преобразованы так, как это указано в блоке описания преобразований
- Insert - вставить сообщения. Похоже на Transform, но тут преобразуются не сами ноты, а будут вставлены их копии. Например, можно задать в условии трансформации сдвиг на 1/8 такта и тогда получим копии нот, смещённые на одну восьмую.
- Insert Exclusive - тут будут вставлены (с учётом преобразований) те сообщения, которые не попали под условия.
- Сору - скопировать события на другой трек. Опять же с учётом преобразований. Трек создаётся автоматически.
- Extract- похоже на Copy, но тут ноты будут не скопированы, а перемещены на новый трек. Например, можно выбрать все события нот и перенести на новый трек. А но старом треке останутся события контроллеров.
- Select - тут мы просто выделяем выбранные сообщения.
Вот и всё, что нужно знать про Logical Editor.
А теперь рассмотрим несколько примеров.
Умный рандомайзПишем мы, например, барабанную партию. Мышкой. Чтобы не звучать как пулемёт, можно каждой ноте сделать слуайный разброс по velosity и позиции. Теперь мы знаем, всё что нужно, чтобы решить эту задачу с помощью Logical Editor'а.
Сначала разберёмся в задаче.
Что нам нужно? Нам нужно изменить позицию и velosity для каждой ноты. Пусть эти величины у нас будут разбросаны от -10 до 10 от текущего значения. А текущее значение velosuty на всех нотах одинаково, т.к. забивали партию мы мышью.
Приступим.
Нужно разделить задачу на три части: цель, действие и параметры действия.
Цель - в нашем случае это все ноты на MIDI-треке. Именно ноты, т.е. события с типом Note.
Действие - т.к. мы меняем парамтеры событий, нам подойдёт Transform.
Параметры действия - тут у нас меняется два праметра: velosity и position. Нам нужно случайно изменить текущее значение в некоторых границах. Для этого идеально подходит функция "Set relative Random Values between".
Условие простое, поэтому расписывать его формулой нет смысла. Сразу приведу скриншот с готовым пресетом для Logical Editor'а.
![Logical Editor в Cubase 982568-5](https://guitarplayer.ru/attach/293032-982568.jpg)
Cubase. кстати, вместо Value 1 может подставлять текст Pitch и т.п.. Так что не пугайтесь. И формат нот, которые он требует в поля, не всегда можно понять.
Следующий пример. Артикуляции по хай-хэту.Вот забили мы хай-хэт. Снова мышкой. И применили к нему рандомайз из предыдущего примера. Но всё равно что-то не то. И правда. Хочется теперь сделать так, чтобы каждый второй удар был слабее.
И тут нам тоже поможет Logical Editor.
Рассмотрим задачу. Опять же разделим на три части.
Цель - каждое второе событие с типом Note, которое соответствует ноте хай-хэта. Жесть, да? Попробуем расписать в виде формулы.
(Type Is Note) AND (Note Equal D#3) AND (Each 2 Event)Тут я скобками выделил части просто для удобства. На деле они нам не понадобятся.
Рассмотрим, теперь каждую часть.
(Type Is Note) - тут всё понятно. В предыдущем примере было. Мы сразу отметаем контроллеры, смены программы и прочие ненужные нам события.
(Note Equal D#3) - тут я сделал допущение, что хай-хэт расположен на ноте D#3. В Logical Editor'е нужно будет составить условие для этого. Вспомним, что у события Note сама нота задаётся в Value1. Тогда мы можем записать условие как
(Value1 Equal D#3)Тут есть подводные камни: Cubase в зависимости от фазы Луны может затребовать ноту как MIDI-код или вообще как что-то непонятное (d#'''). Методом тыка можно подобрать нужную ноту.
И третье условие
(Note Equal D#3)Я выше писал про цель Last Event и то, что она подерживает счётчик. Тогда у нас условие для каждой второй ноты в редакторе будет выглядеть как
Last Event | Every Other Event | Eventcounter | 2
Действие - опять же, используем Transform.
Параметры действия - можно массой способов уменьшить velosity ноты. Я тут решил сделать Set Randov Values between. И указать границы от 30 до 40 единиц. Если партия у нас колеблется около значения в 100 единиц, то 30-40 как раз то ,что нам нужно.
И как это выглядит в редакторе:
![Logical Editor в Cubase 982570-6](https://guitarplayer.ru/attach/293032-982570.jpg)
О чём я и говорил - тут поле под счётчик выдаёт текст в виде "2/D,,,". Т.е. сначала числовое значение, а потом то, какую ноту Cubase ассоциирует с этим числом. В общем-то с некоторым опытом и методом тыка моно разобраться.
Ну и в третьем примере я хотел бы продемонстрировать работу с более сложными условиями, где требуется расставлять скобки.
Выделение части дорожки на другой трек.Представим, что у нас есть партия синтезатора в MIDI. И в особо напряженном моменте песни мы хотим продублировать эту же партию, но с другим тембром. При этом дублировать мы будем только определённые ноты.
Усложним задачу и представим, что на треке с партией синтезатора у нас есть информация с контроллеров, которая на дубле трека нам не нужна, т.к. второй синтезатор не работает с эими контроллерами.
Чтобы ещё проще представить было, есть у нас lead-мелодия и определённые ноты мы хотим дублировать, допустим, чем-то басовым. В дабстепе такое часто можно услышать.
Итак. Что же мы имеем?
Нужно определённые ноты скопировать на отдельный трек. Причём без контроллеров.
Разбиваем задачу на части.
Цели - тут у нас идёт сложное условие. Нужны все события типа Note, у которых Value1 принимает одно из трёх значений. Это будет выглядеть примерно так:
(Type Is Note) AND ((Note Equal D#3) OR (Note Equal E3) OR (Note Equal A3))Обратите внимание, что тут используются вложенные скобки. Тут получается что первое условие у нас всегда должно быть истинным, а вот внутри скобок с тремя следующими условиями достаточно будет того, чтобы хотя бы одно из условий было Истинным (вспоминаем, как работает OR).
Вроде понятно.
Действие - т.к. мы выносим ноты в отдельный трек, то выбираем Copy
Параметры действия - мы не преобразуем ноты. Поэтому этот блок будет пустым.
В результате наш пресет выглядит так:
![Logical Editor в Cubase 982572-7](https://guitarplayer.ru/attach/293032-982572.jpg)
Я надеюсь, что после этой статьи Logical Editor стал более понятным для вас. Чтобы лучше понять принципы построения условий, советую изучить стандартные пресеты.
Если есть какие-то вопросы, спрашивайте.