2013-06-27 4 views
3

Я новый для обертона/суперколлайдера. Я знаю, как звучит физически. Однако я не понимаю волшебство внутри звуковых генераторных функций.подробное объяснение интерфейса побочных эффектов в генераторах обертонов 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, какой интерфейс я могу кодировать, чтобы контролировать его?

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

ответ

2

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

0

Я получил ответ от droidcore на # суперколлайдера/Freenode IRC

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

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

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

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

D: да ну, это как делает поиск в таблице синусов волны

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

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

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

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

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

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

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