Музыка — это универсальный язык, который говорит с душой и может вызвать эмоции, которые невозможно выразить словами. Тем не менее, многих людей пугает мысль о создании музыки, считая, что для этого требуются годы обучения и дорогое оборудование. Однако с помощью 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. Исправляю двумя способами:
- Включите планирование в реальном времени для вашего пользователя:
Возможно, для вашего пользователя не включено планирование в реальном времени. Вы можете включить его, отредактировав
/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 — отличный инструмент для изучения новых музыкальных идей и расширения границ возможного.