2013-06-22 2 views
0
( 

SynthDef(\testEvt,{ 
    arg out, gate = 1; 
    var sint = Blip.ar(440) * Linen.kr(gate,doneAction:2,releaseTime:0.8); 
Out.ar(out, Pan2.ar(sint, 0)); 
}).add(); 

Synth(\testEvt) 
(instrument: \testEvt, freq:220, sustain: inf).play; 
(instrument: \testEvt,freq:220).play; 

) 

Выполнение первой и второй линии после SynthDef бы создать синтезатор, который playes навсегда, в то время как синтезатор третьей линии играет в течение 0,8 секунд, как на значение по умолчанию сгенерированный событий.Supercollider: автомат поддержания в событиях с конвертом

Проблема в том, что я не использую «сустейн» в любом месте своего SynthDef, и он автоматически используется только потому, что есть Linen.

То же самое не происходит для freq: оба события играют на 440, а не на 220, и это только потому, что SynthDef не использует «freq» в качестве аргумента. Итак, почему выдержка не соответствует тому же правилу?

Также есть способ ссылки на синтезаторы, созданные событием? Так что, когда у них есть sustain: inf в качестве аргумента, я могу освободить их позже.

ответ

0
(instrument: \testEvt, freq:220, sustain: inf).play; 

и

(instrument: \testEvt,freq:220).play; 

является событием. События обрабатывают много вещей для вас. Одна вещь, которую они делают, вычисляет, когда устанавливать ворота на 0. (Помните, что gate является одним из аргументов в вашем SynthDef.) В первом примере, поскольку вы поддерживаете бесконечную продолжительность, ворота никогда не обходят нуля. Во втором примере он использует длительность по умолчанию и устанавливает ворота на нуль после того, как эта продолжительность прошла. Вы можете узнать, какие ключевые слова используются в переменных среды событий, посмотрев исходный файл Event.sc. Если вы ищете сустейн, вы узнаете другие ключевые слова, которые он использует для синхронизации. Один из них длится долго. Попробуйте это:

(instrument: \testEvt, dur:3).play 

Freq также ключевое слово для событий, но так как у вас нет FREQ аргумента, он не может повлиять на ваш synthDef. Если вы хотите установить FREQ, вам необходимо внести изменения:

SynthDef(\testEvt,{ 
    arg out, gate = 1, freq = 440; 
    var sint = Blip.ar(freq) * Linen.kr(gate,doneAction:2,releaseTime:0.8); 
    Out.ar(out, Pan2.ar(sint, 0)); 
}).add(); 

Для контраста между событиями и управления синтезатором непосредственно, попробуйте: а = Synth.new (\ testEvt, [\ из, 0, \ gate, 1]) Вы можете добавить любые другие аргументы, такие как freq или sustain, но они не влияют, потому что это не аргументы для вашего synthdef. И, в отличие от Event, synth не делает никаких расчетов от вашего имени. Когда вы хотите, чтобы примечание закончилось, установите ворота на 0 самостоятельно: a.set (\ gate, 0)

Хорошо знать переменные среды событий, так как они также используются Pbinds и с их помощью , вы можете воздействовать на другие вещи. Если у вас был synthdef, который использовал сустейн в качестве аргумента для чего-то другого, вы можете быть удивлены его изменением продолжительности.

Смежные вопросы