SuperCollider : MessaginG

SuperCollider :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register
SynthDefs < Index > Ordre d'exécution

Messages

Pour rester au plus près du fonctionnement réel de sc (dialogue par OSC), JmC préconise l'utilisation du "messaging style" dans la syntaxe du client:

Soit un SynthDef:
s.boot;
SynthDef(\test, { | freq = 400, mul = 0.1|
    Out.ar(0, SinOsc.ar(freq, 0, mul))!2
}).send(s)

On envoie au serveur des messages pour la création et le paramétrage des synths: voir Server-Command-Reference
s.sendMsg(\s_new, \test, 1000);


Par exemple, réévaluer tel quel la ligne s_new ci-dessus provoque une erreur:
FAILURE s_new duplicate node ID
on peut générer automatiquement un id unique en utilisant la méthode nextNodeID:
(
i = s.nextNodeID;
s.sendMsg(\s_new, \test, i);
)
//une alternative consiste à mettre -1 en tant que ID:
s.sendMsg(\s_new, \test, -1);


Gestion des paramètres

le synthdef \test possède deux arguments, freq, et mul, dotés de valeurs par défaut. On peut donner d'autres valeurs (statiques) lors de la création du synth:
i = s.nextNodeID;
s.sendMsg(\s_new, \test, i, 0, 0, \freq, 800, \mul, 0.4);

on peut envoyer des messages par la suite au serveur pour changer ces valeurs, à l'aide du message \n_set:
s.sendMsg(\n_set, i, \freq, 100);
s.sendMsg(\n_set, i, \freq, 400, \mul, 0.2 );

L'envoi de message peut être différé, en utilisant le message .sendBundle : le premier argument de sendBundle est un temps "logique", sc écrit un timestamp dans le message osc destiné au serveur
(

s.sendBundle(0.2, //temps

    ["/s_new", "test", x = s.nextNodeID, 1, 1, "freq", 800],
    ["/s_new", "test", y = s.nextNodeID, 1, 1, "freq", 1001],
    ["/s_new", "test", z = s.nextNodeID, 1, 1, "freq", 1202]
);

s.sendBundle(1.2, ["/n_free", x],["/n_free", y],["/n_free", z]);

)


(
SynthDef(\test2, {|freq = 200, mul = 0.1|
    Out.ar(0, Formant.ar(freq, freq * Rand(1, 3.0), freq * Rand(1, 3.0))!2 * EnvGen.kr(Env.perc(releaseTime: 0.02), doneAction: 2) * mul)
}).send(s)
)

Routine({
    inf.do {0.1.wait;
        s.sendMsg(\s_new, \test2, s.nextNodeID.postln, 1, 1, \freq, exprand(100, 1000), \mul, 0.2.rand)
    }
}).play

voir gestion du temps: Temps logique, temps physique


SynthDefs < Index > Ordre d'exécution

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.1893 seconds