подробное объяснение интерфейса побочных эффектов в генераторах обертонов clojure

Я новичок в обертонах/суперколлайдерах. Я знаю, как звук формируется физически. Однако я не понимаю волшебства внутри звукогенерирующих функций обертонов.

Допустим, у меня есть базовый звук:

(definst sin-wave [freq 440 attack 0.01 sustain 0.4 release 0.1 vol 0.4] 
  (* (env-gen (lin-env attack sustain release) 1 1 0 1 FREE)
     (+ (sin-osc freq)
        (sin-osc (* freq 2))
        (sin-osc (* freq 4)))
     vol))

Я понимаю здесь цикл ASR звуковой огибающей, синусоидальной волны, частоты, громкости. Они описывают амплитуду звука во времени. Чего я не понимаю, так это времени. Поскольку время отсутствует на входе всех функций здесь, как я могу управлять такими вещами, как эхо и другие классные эффекты?

Если я должен написать свою собственную функцию sin-osc, как мне указать амплитуду моего звука в определенный момент времени? Допустим, мой sin-osc должен установить, что на 1/4 цикла выход достигает пика амплитуды 1,0, какой интерфейс я могу использовать для управления им?

Не зная этого, все звуковые синтезаторные генераторы в обертонах для меня не имеют смысла, и они выглядят как странные функции с неизвестными побочными эффектами.


person gzmask    schedule 27.06.2013    source источник


Ответы (2)


Обертон не определяет отдельные сэмплы или формы во времени для каждого сигнала, это просто интерфейс к серверу суперколлайдера (который определяет протокол для взаимодействия, из которых язык суперколлайдера является каноническим клиентом для этого сервера, а обертон — другим). ). По этой причине все, что делается за кулисами, — это отправка сигналов о том, как построить синтетический граф, на сервер суперколлайдера. Сервер суперколлайдера фактически вычисляет, какие сэмплы отправляются на ЦАП, основываясь на определениях синтезаторов, которые воспроизводятся в любой момент времени. Вот почему вам предоставляются примитивные элементы синтезатора, такие как синусоидальные генераторы, прямоугольные волны и фильтры: они вызываются на сервере для фактического расчета сэмплов.

person prismofeverything    schedule 28.06.2013

Я получил ответ от droidcore на #supercollider/Freenode IRC

d: время действительно похоже на время настенных часов, оно просто проходит

d: ugen знает, сколько времени занимает каждая выборка в миллисекундах, поэтому он знает, насколько можно расширить свое представление о времени.

d: так что в adsr, когда вы говорите, что вам нужно время атаки 1,0 секунды, он знает, что ему нужно взять 44100 выборок (скажем), чтобы добраться туда

d: частота дискретизации фиксирована и является глобальной. устанавливается при запуске процесса синтеза

d: да, это все равно, что искать в таблице синусоиды

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

d: вы не можете выполнять логику выборки за выборкой со стороны SC

d: Чак сделает это, если вы хотите поэкспериментировать.

d: время является глобальным, и оно неявно доступно для всех осцилляторов все время, но внутренне это не совсем похоже на закрытую форму, где вы говорите: «дайте мне образец для этого значения времени».

d: вы говорите: «время продвинулось на 5 микросекунд. дайте мне новое значение»

д: это больше похоже на поток

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

person gzmask    schedule 28.06.2013