Определение базового синтезатора: что делают биты
(ns sonic-pi.synths.studio
(:use [overtone.live])
(:require [sonic-pi.synths.core :as core]))
(do
(without-namespace-in-synthdef
(defsynth sonic-pi-recorder
[out-buf 0 in_bus 0]
(disk-out out-buf (in in_bus 2))))
(uncomment
(core/save-synthdef sonic-pi-recorder)))
Это определение используется для определения функции записи в Sonic Pi.
without-namespace-in-synthdef
из sonic-pi.synths.core
должен обернуть defsynth
, чтобы синтезатор соответствовал правильному соглашению об именах.
core/save-synthdef
управляет рабочим процессом сохранения скомпилированного файла synthdef в нужную папку, а также дизайном graphviz, который используется для документации.
При оценке всей формы все файлы должны быть сохранены в нужных местах.
Использование SuperCollider для разработки и компиляции ваших синтезаторов
Вам потребуется установить Supercollider на свой компьютер. Просто определите свой синтезатор с помощью встроенного языка SuperCollider и используйте команду writeDefFile()
, чтобы сохранить скомпилированный synthdef в выбранную вами директорию. Затем вы можете динамически загружать свои synthdefs с помощью fn load_synthdefs
.
Файл дизайна синтезатора
Ниже приведён небольшой пример синтезатора:
SynthDef(\\piTest,
{|freq = 200, amp = 1, out_bus = 0 |
Out.ar(out_bus,
SinOsc.ar([freq,freq],0,0.5)* Line.kr(1, 0, 5, amp, doneAction: 2))}
).writeDefFile(\"/Users/sam/Desktop/my-synths\");
Этот простой синтезатор заставляет два генератора синусоидальных волн звучать на двух отдельных каналах в течение короткого времени.
Давайте рассмотрим его на высоком уровне:
SynthDef
— это функция SuperCollider, которая создаёт определение Synth. Здесь мы передаём SynthDef
два параметра: \\piTest
(имя, которое мы хотим дать синтезатору, предваряемое \\
), и функцию, заключённую в фигурные скобки {...}
, которая описывает компоненты синтезатора, которые будут генерировать звук. (Это должно соответствовать ограничениям дизайна Sonic Pi, как упоминалось выше).
Далее writeDefFile()
используется SuperCollider для создания скомпилированного двоичного файла из исходного определения, и мы передаём ему местоположение папки, где затем сохраняется скомпилированный файл.
Чтобы фактически инициировать создание скомпилированного файла, после ввода вышеуказанного исходного кода синтезатора в новый файл в SuperCollider мы можем выбрать пункт меню Language
> Evaluate File
. В окне «Post Window» (окно журнала SuperCollider) будет отображаться -> a SynthDef
, указывающее на то, что код был успешно выполнен и результатом стал новый файл synthdef, как и требовалось. Новый файл будет ждать в месте, которое мы установили с помощью writeDefFile()
.
Есть два варианта сделать ваш синтезатор доступным в Sonic Pi.
Интеграция синтезатора в Sonic Pi «свободно» позволит вам использовать его, но не сделает доступными такие функции, как автозаполнение параметров синтезатора.
Чтобы включить синтезатор таким образом, во-первых, убедитесь, что параметр «Включить внешние синтезаторы и эффекты» включён в панели настроек в разделе «Аудио» > «Синтезаторы и эффекты».
Затем в коде Sonic Pi вызовите load_synthdefs
с путём к папке, содержащей скомпилированные synthdefs, и они сразу же станут доступны для Sonic Pi через функцию synth
.
Наконец, для таких синтезаторов, которые не тесно интегрированы в Sonic Pi, вы вызываете их по имени со строковым значением — например: synth 'piTest'
.
Тесная интеграция вашего синтезатора в Sonic Pi позволит вам использовать его без необходимости включать внешние синтезаторы и FX или явно загружать путь синтезатора в память заранее. Это также позволит использовать такие функции, как автодополнение параметров синтезатора.
Однако при этом нужно немного больше усилий. Вам необходимо добавить соответствующие метаданные в app/server/ruby/lib/sonicpi/synths/synthinfo.rb
и... Переведём текст на русский язык:
Перекомпилируйте приложение.
Наконец, как и в случае со встроенными синтезаторами, вы будете вызывать синтезатор по имени с помощью символа.
Например: synth :piTest
.
Мы с нетерпением ждём ваших рассказов о созданных вами синтезаторах и эффектах — получайте удовольствие!
Как описано выше, стандартные синтезаторы Sonic Pi всегда завершаются самостоятельно. То есть они имеют огибающую ADSR с конечной длительностью, поэтому они заканчиваются, а затем автоматически удаляются из памяти. Это дизайнерское решение направлено на то, чтобы предотвратить запуск пользователями синтезаторов, которые никогда не завершаются и в конечном итоге заполняют процессор и память.
Синтезаторы с гейтами нестандартны для Sonic Pi. Они используют огибающую, которая удерживается открытой на уровне сустейна в определённой точке отпускания, пока специальный параметр, гейт, не будет установлен на 0. Только тогда они начинают фазу отпускания, после чего окончательно завершают работу. В этот момент они удаляются, как и стандартные синтезаторы. Проблема с синтезаторами с гейтами заключается в том, что вам нужно иметь дескриптор синтезатора, чтобы позже вы могли «управлять» гейтом, установив его на 0. Вы получаете этот дескриптор, присваивая результат от play
или synth
переменной, например так:
a = play 60
Напротив, если вы пропустите это присвоение, не будет способа управлять синтезатором и установить гейт на 0, поэтому он будет работать вечно, и единственный способ остановить его — остановить весь запуск.
Однако синтезаторы с гейтами могут быть забавными, особенно с внешними MIDI-клавиатурами. Ожидаемое поведение при воспроизведении музыки через клавиатуру будет таким, как описано выше: когда нажимается клавиша, огибающая проходит через фазы атаки и затухания, но она удерживается на уровне сустейна, пока клавиша не отпущена.
Sonic Pi поставляется с синтезаторами с гейтами, но они не доступны напрямую, как стандартные синтезаторы, и не перечислены во встроенной справочной системе. Если вы хотите их использовать, вы можете найти исходные коды в этих каталогах:
etc/synthdefs/designs/overtone/sonic-pi/src/sonic_pi/gated
etc/synthdefs/designs/supercollider/gated
и скомпилированные в:
etc/synthdefs/compiled/gated
Их использование требует загрузки. Простой пример использования будет выглядеть так:
load_synthdefs "<<путь-к-вашему-репозиторию-форка-sonic-pi>>/etc/synthdefs/compiled/gated"
use_synth 'sonic-pi-fm_gated'
sth = play 43
sleep 4
control sth, gate: 0
Некоторые заключительные замечания:
Вполне возможно играть на стандартных синтезаторах с MIDI-клавиатурой. Использование синтезаторов с гейтами немного проще, например, при попытке заставить синтезатор использовать фазу отпускания, выбранную с параметром release:
. Ищите «MIDI-клавиатуру» на in-thread для примеров того, как можно сделать обработчик MIDI-клавиатуры, с или без синтезаторов с гейтами.
Некоторые синтезаторы были намеренно исключены. Синтезаторы :dull_bell
и :pretty_bell
зависят от взаимосвязей огибающих своих партиалов, и разумного способа добавления параметра гейта найдено не было. Кроме того, просто ударные синтезаторы, такие как группа синтезаторов SC808, не были включены для использования с гейтом.
На некоторых синтезаторах, например :kalimba
, необходимо уменьшить значение по умолчанию :release
, чтобы гейт вступил в силу.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )