Кодирование ритм-секции

Одним из самых захватывающих и взрывных по своим последствиям для современной музыки, стало изобретение сэмплеров. Это были коробки, которые позволяли записывать в них любой звук, а затем воспроизводить и управлять этим звуком множеством различных способов. Например, можно взять старую записать, найти в ней барабанное соло (или брэйк), записать его в свой сэмплер и воспроизводить на половине от изначальной скорости, чтобы положить его в основу для своих собственных ритмов. Так зарождался ранний хип-хоп, и сегодня практически невозможно найти электронную музыку, в составе которой нет сэмплов в том или ином виде. Использование сэмплов - это действительно отличный способ легко внедрять новые интересные элементы в ваш лайвкодинг-перформанс.

Так и где же можно заполучить этот сэмплер? Ну, у вас уже есть один - это ваш Raspberry Pi! Идущее в комплекте приложение для лайвкодинга Sonic Pi имеет чрезвычайно мощный сэмплер, встроенный в его ядро. Давайте с ним поиграем!

Амен-брейк

Один из самых узнаваемых сэмплов среди классических барабанных брейков называется Амен-брейк. Он впервые прозвучал в 1969 году в песне “Аминь, Брат”, исполнителя “Winstons”, как часть барабанного брейка. Тем не менее, когда он был обнаружен ранними хип-хоп музыкантами в 80-х годах и начал использоваться в сэмплерах, он стал активно внедряться и в другие стили, такие как драм-эн-бэйс, брейкбит, хардкор, техно и брейк-кор.

Я уверен, что вы будете взволнованы, узнав, что он также входит в состав Sonic Pi. Очистите буфер и поместите в него следующий код:

sample :loop_amen

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

Растяжение ритмов

Давайте зациклим амен-брейк, используя наш старый добрый цикл live_loop, представленный в прошлом выпуске этого журнала:

live_loop :amen_break do
  sample :loop_amen
  sleep 2
end

ОК, мы его зациклили, но при каждом повторе есть неприятная пауза. Это потому, что мы сказали Sonic Pi ждать 2 тактовые доли, а с учётом того, что по умолчанию BPM (ударов в минуту) равно 60, сэмпл :loop_amen длится только 1.753 удара. Поэтому мы имеем тишину 2 - 1.753 = 0.247 удара. Даже не смотря на то, что она довольно короткая, она всё равно заметна.

Чтобы устранить эту проблему, мы можем воспользоваться параметром beat_stretch:, чтобы сказать Sonic Pi растянуть (или сжать) сэмпл согласно установленнму количеству ударов.

Функции sample и synth в Sonic Pi дают вам контроль через необязательные параметры, такие как amp:, cutoff: и release:. Однако, термин “необязательный параметр” - это слишком длинное название, поэтому для простоты будем называть их просто параметры.

live_loop :amen_break do
  sample :loop_amen, beat_stretch: 2
  sleep 2
end  

Теперь мы можем танцевать! Хотя, возможно, вы захотите ускорить или замедлить его, чтобы придать звуку иной характер.

Играем со временем

ОК, но что, если мы хотим изменить стиль на олдскульный хип-хоп или брейк-кор? Один из простейших способов сделать это - играть со временем - или, другими словами, сдвинуть темп. В Sonic Pi это супер просто - добавьте use_bpm в живой цикл:

live_loop :amen_break do
  use_bpm 30
  sample :loop_amen, beat_stretch: 2
  sleep 2
end 

Пока вы будете читать рэп под этот медленный ритм, обратите внимание, что мы до сих пор ждём 2 удара, и хотя наш BPM 30, всё продолжает звучать пропорционально. Параметр beat_stretch работает с текущим BPM, чтобы быть уверенным, что всё будет работать исправно.

Теперь самое интересное. Пока цикл всё ещё исполняется, изменми 30 в строке use_bpm 30 на50. Ого, всё ускорилось, но продолжает звучать равномерно во времени! Попытайтесь разогнаться ещё быстрее - до 80, до 120, или, сойдите с ума, и дайте 200!

Фильтрация

Теперь, когда мы можем зацикливать сэмплы в реальном времени, давайте взглянем на некоторые из самых забавных параметров, предоставляемых сэмплером. Первый - cutoff:, который контролирует частоту среза фильтра. По умолчанию эта возможность отключена, но вы можете легко её включить:

live_loop :amen_break do
  use_bpm 50
  sample :loop_amen, beat_stretch: 2, cutoff: 70
  sleep 2
end  

Давайте изменим параметр cutoff:. Например, увеличьте его до 100, нажмите Выполнить и ждите, пока круг цикла завершится, чтобы услышать изменения в звуке. Обратите внимание, что низкие значения, такие как 50, дают сочный звук и басы, а высокие значения, типа 100 и 120, дают более полное звучание и больше высокочастотных составляющих. Это происходит потому, что параметр cutoff: срезает высокочастотную область звука так же, как газонокосилка срезает верхнюю часть травы. Параметр cutoff: определяет сколько “травы” оставлять.

Нарезка

Еще один отличный инструмент, с которым можно поиграть - это эффект slicer. Он позволяет “нарезать” звук сэмпла. Оберните строку sample кодом эффекта, как здесь:

live_loop :amen_break do
  use_bpm 50
  with_fx :slicer, phase: 0.25, wave: 0, mix: 1 do
    sample :loop_amen, beat_stretch: 2, cutoff: 100
  end
  sleep 2
end

Обратите внимание, как звук стал более упругим (вы можете услышать оригинальное звучание сэмпла без эффекта, установив параметр mix: в 0.) Теперь поиграйтесь с параметром phase:. Это размер (в ударах) нарезки. Меньшее значение, такое как 0.125, нарежет сэмпл более короткими кусками и в большем количестве, чем значение 0.5, при котором нарезка будет реже и толще. Обратите внимание, что удвоения значений phase, как правило, всегда звучат хорошо. Наконец, измените параметр wave:, выбрав из 0, 1 или 2, и послушайте, как меняется звук. Это три разные формы волны. 0 - это пилообразная волна, (резко начинается, плавно затухает), 1 - прямоугольная волна (резко начинается, резко обрывается), и 2 - треугольная волна (плавно нарастает, плавно затухает).

Соединим всё вместе

Наконец, давайте вернёмся назад во времени, и вновь посетим раннюю Бристольскую драм-эн-бэйс сцену. Не волнуйтесь о том, что всё это значит, просто введите этот код в пустой буфер, нажмите “Выполнить”, и начинайте лайвкодинг. Изменяйте значения параметров и подумайте, где бы вы смогли применить это. Пожалуйста, поделитесь тем, что у вас получилось! Увидимся в следующий раз…

use_bpm 100
  
live_loop :amen_break do
  p = [0.125, 0.25, 0.5].choose
  with_fx :slicer, phase: p, wave: 0, mix: rrand(0.7, 1) do
    r = [1, 1, 1, -1].choose
    sample :loop_amen, beat_stretch: 2, rate: r, amp: 2
  end
  sleep 2
end
  
live_loop :bass_drum do
  sample :bd_haus, cutoff: 70, amp: 1.5
  sleep 0.5
end
  
live_loop :landing do
  bass_line = (knit :e1, 3, [:c1, :c2].choose, 1)
  with_fx :slicer, phase: [0.25, 0.5].choose, invert_wave: 1, wave: 0 do
    s = synth :square, note: bass_line.tick, sustain: 4, cutoff: 60
    control s, cutoff_slide: 4, cutoff: 120
  end
  sleep 4
end