Музыка — это универсальный язык, который говорит с душой и может вызвать эмоции, которые невозможно выразить словами. Тем не менее, многих людей пугает мысль о создании музыки, считая, что для этого требуются годы обучения и дорогое оборудование. Однако с помощью Sonic Pi и, в моем случае, ноутбука Ubuntu 22.04 Linux, я могу начать исследовать мир музыкальных композиций, как и вы!

Sonic Pi — это среда программирования с открытым исходным кодом, предназначенная для обучения программированию с помощью музыки. Это отличный инструмент для начинающих, которые хотят создавать простую музыку без какой-либо музыкальной подготовки. С Sonic Pi вы можете использовать код для создания звуков, ритмов и мелодий, что позволяет вам экспериментировать с различными музыкальными элементами и создавать свои собственные уникальные композиции.

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

Установка

Чтобы начать работу с Sonic Pi в Ubuntu 22.04, вам необходимо установить пакет sonic-pi с помощью apt-get. Обновите базу данных apt с помощью apt-get, используя следующую команду.

sudo apt-get update

После обновления базы данных apt мы можем установить sonic-pi с помощью apt-get, выполнив следующую команду:

sudo apt-get -y install sonic-pi

Однако в процессе установки я получаю сообщение об ошибке Невозможно подключиться к SuperCollider, когда я нахожусь в процессе установки Sonic Pi. Исправляю двумя способами:

  1. Включите планирование в реальном времени для вашего пользователя:

Возможно, для вашего пользователя не включено планирование в реальном времени. Вы можете включить его, отредактировав

/etc/security/limits.conf или /etc/security/limits.d/99-realtime.conf с помощью вашего любимого текстового редактора, например nano.

nano /etc/security/limits.conf

и добавив следующие строки:

@audio — rtprio 95
@audio — memlock unlimited

Затем добавьте своего пользователя в группу audio, запустив:

sudo usermod -a -G audio <your-username>

ps: Чтобы проверить имя пользователя в Ubuntu, я использую команду whoami в терминале. Просто введите следующую команду:

whoami

2.Настройте JACK:

Установите qjackctl. Рекомендуется использовать qjackctl для настройки JACK перед запуском Sonic Pi. Установите qjackctl, выполнив:

sudo apt install qjackctl

Запустите qjackctl. Запустите из меню приложения или введите его в терминале.

qjackctl

Настройте qjackctl. В главном окне qjackctl нажмите кнопку «Настройка», чтобы открыть диалоговое окно настройки. В диалоговом окне «Настройка» вы можете настроить следующие параметры:

  • Драйвер. Выберите драйвер «ALSA», который является наиболее распространенным драйвером для аудиосистем Linux.
  • Интерфейс. Нажмите на поле «Интерфейс» и выберите звуковую карту из раскрывающегося списка. Он должен выглядеть как `hw:CARD,DEV` (например, `hw:PCH,0`). Если вы не уверены, какой из них выбрать, вы можете попробовать каждый вариант один за другим и проверить, работает ли он.
  • Частота дискретизации. Выберите частоту дискретизации, поддерживаемую вашей звуковой картой, обычно 44 100 или 48 000 Гц.
  • Кадры/период: установите более низкое значение (например, 128 или 256) для меньшей задержки или более высокое значение (например, 512 или 1024) для лучшей стабильности. Обратите внимание, что более низкая задержка может вызвать звуковые артефакты, такие как щелчки или хлопки, если ваша система не может их обработать.
  • Периоды/буфер: установите значение 2 для большинства систем или 3, если у вас возникли проблемы со звуком, если установлено значение 2.
  • После настройки параметров нажмите кнопку «ОК», чтобы сохранить их.

Запустите сервер JACK. В главном окне qjackctl нажмите кнопку «Пуск», чтобы запустить сервер JACK.

Подключите свои устройства. В главном окне qjackctl нажмите кнопку «Подключение», чтобы открыть диалоговое окно «Подключения». Здесь вы можете вручную подключать и отключать свои устройства. Вы можете подключать свои устройства по одному, чтобы увидеть, как qjackctl относится к каждому из них.

Сначала запустите qjackctl, прежде чем открывать Sonic Pi (важное замечание для меня).

Пробная версия песни

Теперь пора играть! Я попытался сделать песню, и вот она с разбивкой:

`use_bpm 130`: устанавливает темп дорожки на 130 ударов в минуту.

`in_thread do … end`: этот блок кода определяет новый поток, который выполняется одновременно с основным потоком. Это позволяет одновременно воспроизводить разные части музыки.

in_thread do
 loop do
 sample :drum_bass_hard, amp: 1.5
 sleep 0.5
 sample :drum_snare_hard, amp: 0.8
 sleep 4
 sample :drum_cymbal_closed, amp: 0.5
 sleep 0.25
 sample :drum_cymbal_closed, amp: 0.5
 sleep 3
 end
end

Первый поток воспроизводит барабанную петлю, используя различные сэмплы ударных из библиотеки Sonic Pi. Цикл повторяется бесконечно (loop do) и состоит из следующих шагов:
- sample :drum_bass_hard, amp: 1.5: воспроизводит звук большого барабана с более высоким амплитуда (громкость).
- sleep 0,5: пауза на 0,5 секунды перед следующим звуком.
- sample :drum_snare_hard, amp: 0,8: воспроизведение звук малого барабана с более низкой амплитудой.
- sleep 4: пауза в 4 секунды перед следующим звуком.
- sample :drum_cymbal_closed, amp: 0.5: воспроизводит звук закрытого хай-хэта с меньшей амплитудой.
- sleep 0,25: делает паузу на 0,25 секунды перед следующим звуком.
- sample:drum_cymbal_closed , amp: 0,5: воспроизводит другой звук закрытого хай-хэта с меньшей амплитудой.
- sleep 3: пауза на 3 секунды перед перезапуском петли.

in_thread do
 use_synth :piano
 loop do
 play chord(:e2, :minor), release: 1, cutoff: 90, amp: 0.6
 sleep 0.5
 play chord(:c3, :minor), release: 1, cutoff: 90, amp: 0.6
 sleep 0.5
 play chord(:g2, :minor), release: 1, cutoff: 90, amp: 0.6
 sleep 0.5
 play chord(:d3, :minor), release: 1, cutoff: 90, amp: 0.6
 sleep 0.5
 end
end

Второй поток воспроизводит мелодию фортепиано, используя функцию use_synth для выбора используемого звука синтезатора. Цикл повторяется бесконечно (loop do) и состоит из следующих шагов:
- играть аккорд(:e2, :minor), релиз: 1, cutoff: 90, усиление: 0,6: Воспроизведение минорный аккорд, состоящий из нот E, G и B. Параметры Release, Cutoff и amp регулируют время восстановления, Cutoff фильтра и амплитуду звука соответственно.
- sleep 0,5: пауза в 0,5 секунды перед следующим звуком.
 – одна и та же последовательность шагов повторяется с разными нотами аккорда (:c3, :g2, :d3), чтобы создать повторяющуюся последовательность аккордов.

in_thread do
 use_synth :prophet
 with_fx :slicer do
 loop do
 play chord(:e3, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
 sleep 0.25
 play chord(:c4, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
 sleep 0.25
 play chord(:g3, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
 sleep 0.25
 play chord(:d4, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
 sleep 0.25
 end
 end
end

Третий поток воспроизводит звук синтезатора с помощью функции use_synth, на этот раз с использованием звука синтезатора «Prophet» с эффектом нарезки, добавленным функцией with_fx. функция. Цикл повторяется бесконечно (loop do) и состоит из следующих шагов:
- играть аккорд(:e3, :minor), релиз: 0,3, отсечка: rrand(70, 110), amp: 0,4: воспроизводит минорный аккорд с более коротким временем восстановления и частотой среза, которая случайным образом варьируется от 70 Гц до 110 Гц. Функция rrand генерирует случайное число в заданном диапазоне.
- sleep 0,25: делает паузу на 0,25 секунды перед следующим звуком.
- то же самое. последовательность шагов повторяется с разными аккордовыми нотами (:c4, :g3, :d4), чтобы создать повторяющуюся последовательность аккордов.

in_thread do
 use_synth :pluck
 with_fx :echo do
 loop do
 play :e4, release: 0.4, cutoff: 110, amp: 0.6
 sleep 1
 play :c5, release: 0.4, cutoff: 110, amp: 0.6
 sleep 1
 play :g4, release: 0.4, cutoff: 110, amp: 0.6
 sleep 1
 play :d5, release: 0.4, cutoff: 110, amp: 0.6
 sleep 1
 end
 end
end

Четвертый блок in_thread создает новый поток, который использует синтезатор :pluck и применяет эффект :echo. Внутри цикла он воспроизводит серию нот, каждая из которых имеет разную высоту звука. Параметры Release, Cutoff и amp имеют то же значение, что и в предыдущих блоках.

in_thread do
 with_fx :reverb do
 loop do
 sample :bd_haus, rate: 0.9, cutoff: 120, amp: 0.7
 sleep 1
 end
 end
end

Последний блок in_thread создает новый поток, который применяет эффект :reverb к сэмплу большого барабана (:bd_haus). Параметр rate используется для изменения высоты тона сэмпла, а параметры cutoff и amp имеют то же значение, что и в предыдущих блоках.

Вот полный код песни:

use_bpm 130

in_thread do
  loop do
    sample :drum_bass_hard, amp: 1.5
    sleep 0.5
    sample :drum_snare_hard, amp: 0.8
    sleep 4
    sample :drum_cymbal_closed, amp: 0.5
    sleep 0.25
    sample :drum_cymbal_closed, amp: 0.5
    sleep 3
  end
end

in_thread do
  use_synth :piano
  loop do
    play chord(:e2, :minor), release: 1, cutoff: 90, amp: 0.6
    sleep 0.5
    play chord(:c3, :minor), release: 1, cutoff: 90, amp: 0.6
    sleep 0.5
    play chord(:g2, :minor), release: 1, cutoff: 90, amp: 0.6
    sleep 0.5
    play chord(:d3, :minor), release: 1, cutoff: 90, amp: 0.6
    sleep 0.5
  end
end

in_thread do
  use_synth :prophet
  with_fx :slicer do
    loop do
      play chord(:e3, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
      sleep 0.25
      play chord(:c4, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
      sleep 0.25
      play chord(:g3, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
      sleep 0.25
      play chord(:d4, :minor), release: 0.3, cutoff: rrand(70, 110), amp: 0.4
      sleep 0.25
    end
  end
end

in_thread do
  use_synth :pluck
  with_fx :echo do
    loop do
      play :e4, release: 0.4, cutoff: 110, amp: 0.6
      sleep 1
      play :c5, release: 0.4, cutoff: 110, amp: 0.6
      sleep 1
      play :g4, release: 0.4, cutoff: 110, amp: 0.6
      sleep 1
      play :d5, release: 0.4, cutoff: 110, amp: 0.6
      sleep 1
    end
  end
end

in_thread do
  with_fx :reverb do
    loop do
      sample :bd_haus, rate: 0.9, cutoff: 120, amp: 0.7
      sleep 1
    end
  end
end

Примеры

Я думаю, что приятно просто услышать о некоторых возможностях Sonic Pi. Итак, я исследую некоторые из песен, которые уже сделаны в примерах.

Для этого в Sonic Pi иду вверху справа => «Переключить панель справки» (Alt + I), затем выбираю «Примеры» и выберите такие треки, как «Reich Phase, Haunted, Idm Breakbeat, Bach Minuet in G, Sonic Dreams», в качестве примеров для вставки в редактор.

  • Фаза Райха
    Этот код реализует известную композицию Стива Райха «Фаза фортепиано», в которой два пианиста играют один и тот же повторяющийся паттерн, но один из них постепенно увеличивает скорость, пока они не перестанут синхронизироваться. с другим. Этот эффект достигается за счет использования двух `live_loops`: один воспроизводит паттерн с медленной скоростью, а другой воспроизводит его немного быстрее. Он хорошо воспроизводит минималистский стиль оригинального произведения Райха.
  • Haunted
    Этот код генерирует жуткий звук в стиле дома с привидениями, используя образец `:perc_bell` и случайные значения для параметров rate и sleep. Хотя результат, безусловно, жуткий и атмосферный, сам код относительно прост, но интересен.
  • Idm Breakbeat
    Этот код генерирует ритм брейкбита в стиле IDM, используя различные образцы и случайные значения для параметров n и rate. В результате получился сложный и постоянно развивающийся бит, который хорошо вписывается в жанр IDM. Тем не менее, код мог бы выиграть от некоторой дополнительной организации и комментариев, чтобы сделать его более понятным.
  • Бах
    Этот код реализует известный менуэт Баха в G с использованием встроенной функции Sonic Pi `play_pattern_timed`. Код хорошо воспроизводит мелодию и аккомпанемент менуэта, а использование потоков позволяет одновременно играть партии левой и правой руки. Это очень солидная реализация классического музыкального произведения.

Некоторые вещи, которые следует учитывать

- Экспериментируйте с различными синтезаторами, сэмплами и эффектами, чтобы найти новые звуки и текстуры.
- Попробуйте варьировать темп, ритм и гармонию, чтобы создать более интересные и уникальные композиции.
- Используйте комментарии и организацию, чтобы сделать ваш код легче читать и понимать.
- Воспользуйтесь преимуществами встроенных функций и возможностей Sonic Pi, чтобы упростить код и избежать ненужного повторения.
- Не бойтесь экспериментировать и получать удовольствие! Sonic Pi — отличный инструмент для изучения новых музыкальных идей и расширения границ возможного.