Резюме

В первой части мы рассмотрели воспроизведение синтезированного звука и семплов. Здесь мы расширим и представим еще несколько структур/паттернов и посмотрим на FX.

  • Циклы и итераторы — чтобы представить некоторую базовую структуру
  • Рандомизация — добавить еще несколько интересных звуков
  • Эффекты — наложение некоторых эффектов (эффект реверберации) на сэмплы.
  • Генерация арпеджио — с использованием некоторых переменных и лупов

Циклы/Итераторы

В первой части мы использовали простой цикл для воспроизведения набора сэмплов бочки, это было следующим образом:

use_sample_bpm :drum_heavy_kick
  
4.times do |n|
  sample :drum_heavy_kick
  sleep 0.5
end

Давайте расширим это:

  • Воспроизведение семпла (бас-бочки) определенное количество раз (используя .times)
  • Добавив еще один семпл, который воспроизводится после первого, мы будем использовать ключевое слово sleep, чтобы воспроизвести его на более медленной скорости.
use_sample_bpm :drum_heavy_kick
  
4.times do |n|
  sample :drum_heavy_kick
  sleep 0.5
end
3.times do |n|
 sample :drum_heavy_kick
 sleep 2
end

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

use_sample_bpm :drum_heavy_kick
loop do
  
  4.times do |n|
    sample :drum_heavy_kick
    sleep 0.5
  end
  
  3.times do |n|
    sample :drum_heavy_kick
    sleep 2
  end
  
end

Используйте сочетание клавиш ⌘ + R или кнопку «Выполнить». На этот раз вам нужно будет использовать сочетание клавиш ⌘ + S или кнопку «Стоп».

Довольно круто? Попробуйте поиграть со значениями для сна, добавьте еще один раздел .times. Интересно попробовать повторить то, что вы знаете в популярной музыке.

Хорошо, давайте вернемся к синтезированному инструменту и рассмотрим некоторые основные алгоритмы.

Рандомизация

Мы можем использовать любой синтезированный инструмент и использовать функцию rrand() для создания каждый раз новой ноты. В конце звучит несколько жутковато.

use_synth :piano
loop do
  play rrand(20, 80)
  sleep 0.1
end

Вы также можете применить rrand() к другим вещам, попробуйте использовать его с ключевым словом sleep.

Эффекты (FX)

Пока мы этим занимаемся, давайте воспользуемся Sonic Pi FX (реверберацией), чтобы сделать наш странный фортепианный луп еще более странным:

use_synth :piano
with_fx :reverb, room: 0.9 do
  loop do
    play rrand(20, 50)
    sleep 0.4
  end
end

Вы можете узнать больше о параметрах FX здесь:



А также эффект реверберации с различными параметрами здесь:



Создание арпеджио

В порядке. Итак, мы сгенерировали несколько основных последовательностей нот. Теперь давайте рассмотрим довольно стандартную музыкальную структуру — арпеджио. Мы создаем арпеджио, циклически перебирая массив нот и изменяя значение base_note в следующем (сначала добавляя к нему 3, а затем добавляя 7). Мы делаем это для каждой заметки в массиве, увеличивая n на 1.

interval = 0.2
notes = [72, 65, 58, 62]
while true
  n = 0
  notes.length.times do
    base_note = notes[n]
    3.times do
      play base_note
      sleep interval
      play base_note + 3
      sleep interval
      play base_note + 7
      sleep interval
    end
    n += 1
  end
end

Это дает вам восходящее арпеджио. Попробуйте создать нисходящее арпеджио, также вычитая из значения.

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

В части 3 мы рассмотрим создание песни из синтезаторов (для ударных, базы и мелодии), а затем добавим несколько сэмплов Sonic Pi для разнообразия.

Шпаргалка
https://www.cl.cam.ac.uk/projects/raspberrypi/sonicpi/media/sonic-pi-cheatsheet.pdf