Done Actions - Supercollider


UGen Done Actions  

A number of UGens implement doneActions. These allow one to optionally free or pause the enclosing synth and other related nodes when the UGen is finished. These include EnvGen, Line, XLine, Linen, DetectSilence and some Demand ugens.

The available done actions are as follows:

0 do nothing when the UGen is finished
1 pause the enclosing synth, but do not free it
2 free the enclosing synth
3 free both this synth and the preceding node
4 free both this synth and the following node
5 free this synth; if the preceding node is a group then do g_freeAll on it, else free it
6 free this synth; if the following node is a group then do g_freeAll on it, else free it
7 free this synth and all preceding nodes in this group
8 free this synth and all following nodes in this group
9 free this synth and pause the preceding node
10 free this synth and pause the following node
11 free this synth and if the preceding node is a group then do g_deepFree on it, else free it
12 free this synth and if the following node is a group then do g_deepFree on it, else free it
13 free this synth and all other nodes in this group (before and after)
14 free the enclosing group and all nodes within it (including this synth)

For information on freeAll and deepFree, see Group and Server-Command-Reference.

doneAction: un suono percussivo quale quello generato inviluppan-

do una sinusoide, ad esempio con Env.perc, genera il tipico invilup-
po percussivo senza sostegno. Ma che succede quando l’inviluppo
è terminato? È necessario ricordare che nell’esempio di partenza, ri-
portato qui sopra nella riga 1, SC svolge un lavoro oscuro ma sostan-
ziale, che è riportato dalla riga 6 in avanti:

crea una synthDef
istanzia da questa un synth e lo mette in funzione
Se si considera questo secondo blocco di codice, si può meglio ap-
prezzare il problema. Che fine fa il synth? Senza deallocazione espli-
cita, resta attivo: EnvGen continua a generare un segnale d’ampiezza
nulla, e un’altra UGen responsabile della sinusoide, SinOsc un altro
segnale. Spetta infatti all’utente rimuovere il synth un volta che que-
sti ha generato il segnale percussivo richiesto. Una sequenza di 20
suoni percussivi allocherebbe un numero analogo di synth, con in-
tuibile spreco di RAM e di CPU. L’argomento doneAction permette

di evitare il lavoro di deallocazione, poiché esso viene preso in ca-
rico direttamente da scsynth. L’argomento doneAction permette di
specificare che cosa scsynth debba fare del synth in questione una
volta terminata la lettura dell’inviluppo. I valori possibili sono at-
tualmente 14. Ad esempio con doneAction = 0 scsynth non fa nulla
e il synth resta allocato e funzionante. Il valore più utilizzato è do-
neAction = 2, che dealloca il synth. In sostanzia quel synth non c’è
più e non c’è da preocuparsi della sua esistenza. Ovviamente il synth
non è più disponbile. Se si volesse generare un’altra sinusoide per-
cussive sarebbe necessario costruire un altro synth dalla stessa syn-
thDef. Si consideri l’esempio seguente in cui il mouse funziona come
un trigger. Se doneAction = 0 il synth è residente e ad ogni passag-
gio del mouse può essere attivato grazie al trigger. Se doneAction
= 2 dopo la prima attivazione il synth è deallocato e il comporta-
mento del mouse non può inviare alcun messaggio. Nell’interfaccia
grafica del server è visibile il numero dei synth attivi: si nota allora
l’incremento del numero quando è creato il synth (implicitamente)
e il diverso comportamento (persitenza/decremento) in funzione di
doneAction.



Categories: Share

Leave a Reply