1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-sonic-pi

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
SYNTH_DESIGN.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 01:39 b361559

Определение базового синтезатора: что делают биты

(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

Интеграция синтезатора в Sonic Pi «свободно» позволит вам использовать его, но не сделает доступными такие функции, как автозаполнение параметров синтезатора.

Чтобы включить синтезатор таким образом, во-первых, убедитесь, что параметр «Включить внешние синтезаторы и эффекты» включён в панели настроек в разделе «Аудио» > «Синтезаторы и эффекты».

Затем в коде Sonic Pi вызовите load_synthdefs с путём к папке, содержащей скомпилированные synthdefs, и они сразу же станут доступны для Sonic Pi через функцию synth.

Наконец, для таких синтезаторов, которые не тесно интегрированы в Sonic Pi, вы вызываете их по имени со строковым значением — например: synth 'piTest'.

Тесная интеграция в Sonic Pi

Тесная интеграция вашего синтезатора в 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-sonic-pi.git
git@api.gitlife.ru:oschina-mirror/mirrors-sonic-pi.git
oschina-mirror
mirrors-sonic-pi
mirrors-sonic-pi
dev