До сих пор в этой серии мы фокусировались на запуске звуков. Мы обнаружили, что можем запускать синтезаторы Sonic Pi с помощью play
или synth
, а предварительно записанные сэмплы с помощью sample
. Мы также рассмотрели, как обернуть эти звуки внутрь FX-контекста студийных эффектов, таких как реверберация и искажение, используя команду with_fx
. Объединив это с невероятно точной системой синхронизации Sonic Pi, вы сможете создавать огромное количество звуков, битов и риффов. Однако, как только вы тщательно выбрали параметры определенного звука и запустили его, у вас не будет возможности поиграть с ним, пока он воспроизводится, правильно? Неправильно! Сегодня вы узнаете кое-что очень мощное - как управлять работой синтезаторов.
Давайте создадим простой звук. Запустите Sonic Pi и в свободном буфере наберите следующее:
synth :prophet, note: :e1, release: 8, cutoff: 100
Теперь нажмите кнопку Выполнить в левом верхнем углу, чтобы услышать чудный грохочущий синтезаторный звук. Давайте, нажмите его еще несколько раз, чтобы хорошенько прочувствовать это. Готово? Теперь давайте поуправляем им!
Малоизвестная особенность Sonic Pi заключается в том, что функции play
, synth
и sample
возвращают нечто, называемое SynthNode, что представляет собой исполняемый звук. Вы можете захватить один из этих
SynthNode, используя стандартную переменную, а затем ** контролировать ** ее в более поздний момент времени. Например, давайте изменим значение параметр
cutoff:` после 1 такта:
sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
control sn, cutoff: 130
Давайте рассмотрим каждую строку по очереди:
Сначала мы запускаем синтезатор : prophet
, используя функцию ` synth как обычно. Кроме того, мы еще фиксируем это в переменной с именем
sn. Мы могли бы назвать эту переменную как-то иначе, например, «synth_node» или «jane» - имя не имеет значения. Однако полезно выбрать такое имя, которое будет что-то означать для вас и для людей, читающих ваш код. Я выбрал
sn`, так как это мнемонически удобное сокращение для узла синтезатора (synth node).
В строке 2 у нас есть стандартная команда sleep
. В этом нет ничего особенного - она просто просит компьютер подождать 1 такт, прежде чем перейти к следующей строке.
В строке 3 начинается веселье управления. Здесь мы используем функцию control
, чтобы указать исполняемому SynthNode
изменить значение среза фильтра на 130
. Если вы нажмете кнопку ** Выполнить **, вы услышите, как синтезатор : prophet
начнет воспроизводиться, как было прежде, но после 1 такта он будет звучать намного ярче.
Модулируемые параметры
Большинство параметров синтезаторов и эффектов в Sonic Pi могут быть изменены в процессе исполнения. Но это не относится ко всем из них. Например, параметры огибающей attack:
, decay:
, Sustain:
и release:
могут быть установлены только при запуске исполнения синтезатора. Выяснить, какие параметры можно, а какие нельзя изменять достаточно просто - перейдите к документации синтезатора или эффекта, а затем прокрутите вниз до спецификаций отдельных параметров, ориентируясь на фразы «Может быть изменено во время игры» или «Не может быть измененным после установки». Например, документация для : beep
synth’s указывает, что параметр ‘attack:`изменять нельзя:
Пока синтезатор исполняется, вы не ограничены изменять его только один раз - вы можете менять его столько раз, сколько захотите. Например, мы можем превратить наш : prophet
в мини-арпеджиатор следующим образом:
notes = (scale :e3, :minor_pentatonic)
sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
16.times do
control sn, note: notes.tick
sleep 0.125
end
В этом фрагменте кода мы только добавили пару дополнительных вещей. Сначала мы определили новую переменную с именем notes
, которая содержит ноты, которые мы хотели бы циклически перемещать (арпеджиатор - это просто причудливое имя для чего-то, что циклически перебирает список нот по порядку). Во-вторых, мы заменили наш одиночный вызов на control
итерацией, вызывающей его 16 раз. В каждом вызове control
мы проходим с помощью ` .tick наше кольцо
notes, которое будет автоматически повторяться, как только мы доберемся до конца (благодаря невероятной силе колец Sonic Pi). Для некоторого разнообразия попробуйте заменить
.tick на
.choose` и посмотрите, можете ли вы услышать разницу.
Обратите внимание, что мы можем изменять несколько параметров одновременно. Попробуйте изменить строку управления на следующую и прислушайтесь к разнице:
control sn, note: notes.tick, cutoff: rrand(70, 130)
Когда мы контролируем SynthNode
, он реагирует точно вовремя и мгновенно меняет текущее значение параметра на новое, как если бы вы нажали кнопку или щелкнули переключателем, запрашивая изменение. Это может звучать ритмично и резко - особенно если парамметр контролирует какой-нибудь аспект тембра, как , например, cutoff:
. Однако иногда вы не хотите, чтобы изменения произошли мгновенно. Вместо этого вы можете плавно перейти от текущего значения к новому, как если бы вы переместили слайдер или валкодер. Конечно, Sonic Pi также может сделать это посредством _slide:
.
Каждый параметр, который можно изменить, также имеет специальный соответствующий ему параметр _slide:
, который позволяет указать время скольжения. Например, amp:
имеет amp_slide:
, так же как cutoff:
имеет cutoff_slide:
. Эти параметры скольжения работают немного иначе, чем все остальные, в том смысле, что они сообщают синтезатору, как себя вести **во время, когда ими управляют **. Давайте взглянем:
sn = synth :prophet, note: :e1, release: 8, cutoff: 70, cutoff_slide: 2
sleep 1
control sn, cutoff: 130
Обратите внимание, что этот пример точно такой же, как и раньше, за исключением добавления cutoff_slide:
. Это говорит о том, что во время когда параметр cutoff:
этого синтезатора будет управляться, потребуется 2 такта на то, чтобы перейти от текущего значения к новому. Поэтому, когда мы используем control
, вы можете услышать скольжение значения среза фильтра от 70 до 130. Это создает интересное динамическое ощущение звука. Теперь попробуйте изменить время cutoff_slide:
на более короткое значение, такое как 0,5, или более длинное значение, такое как 4, чтобы увидеть, как это меняет звук. Помните, что вы можете перемещать любые изменяемые параметры точно таким же образом, и каждое значение _slide:
может быть совершенно разным. Вы можете одновременно медленно скользить по срезу фильтра, быстро смещать амплитуду и плавно двигаться по панораме со средней между этими значениями скоростью, ища для себя творческие новые возможности …
Давайте рассмотрим короткий пример, который демонстрирует мощь управления синтезаторами после запуска их исполнения. Обратите внимание, что вы также можете плавно изменять параметры эффектов, хотя и с немного другим синтаксисом. Ознакомьтесь с разделом 7.2 встроенного руководства для получения дополнительной информации об управлении эффектами.
Скопируйте код в свободный буфер и прослушайте его. Не останавливайтесь на достигнутом - поиграйте с кодом. Измените время скольжения, измените ноты, синтезатор, эффекты, время сна и посмотрите, сможете ли вы превратить его во что-то совершенно другое!
live_loop :moon_rise do
with_fx :echo, mix: 0, mix_slide: 8 do |fx|
control fx, mix: 1
notes = (scale :e3, :minor_pentatonic, num_octaves: 2).shuffle
sn = synth :prophet , sustain: 8, note: :e1, cutoff: 70, cutoff_slide: 8
control sn, cutoff: 130
sleep 2
32.times do
control sn, note: notes.tick, pan: rrand(-1, 1)
sleep 0.125
end
end
end