Bus <
Index >
Buffers
Open Sound Control (OSC)
- protocole utilisé pour envoyer de l'information au travers d'un réseau UDP ou TCP
- comme nous l'avons vu, sc utilise une version simplifiée de osc pour la communication client/serveur(s)
- il permet la communication vers et depuis d'autres logiciels et matériels intégrant le protocole osc (Max-MSP, PD, Reaktor, Bidule, Lemur, Traktor, etc., voir http://www.cnmat.berkeley.edu/OpenSoundControl/∞)
envoi de message osc vers un IP
//demo
s.boot;
SynthDef(\test, {Out.ar(0, SinOsc.ar([400, 402], mul: 0.2)!2)}).send(s)
(
var n, id;
//loopback~- on peut lui substituer un autre ip
n=NetAddr("127.0.0.1", 57110);// localhost + port de scserver
id=s.nextNodeID;//affectation d'ID automatique
n.sendMsg("s_new",\test, id, 0, 0 );//création du synth
SystemClock.sched(1.0,{n.sendMsg("n_free",id); }); //envoi de message de fin
)
- notez que l'envoi de message se fait ici avec l'objet NetAddr, et non Server
- l'objet Server intègre dans son implémentation NetAddr
réception de messages OSC
(
// stockage d'une fonction à déclencher à la réception d'un message '/tr' depuis le réseau
//note: '/tr' est le message envoyé par l'UGen Sendtrig
OSCresponder(s.addr,'/tr',
{ arg time,responder,msg; //la fonction, avec arguments
"trigger !".postln;
Post << msg <<nl;
}).add;
//envoi d'un message 'trig' à chaque impulsion, depuis le serveur
{SendTrig.ar(Impulse.ar(0.5))}.play;
)
//remplacement par la réponse suivante:
(
OSCresponder(s.addr,'/tr',{ arg time,responder,msg;
"nouvelle réaction!".postln;
Post << time <<nl;
}).add;
)
permet plusieurs réponses pour un même message
(
s = Server.local;
s.boot;
s.notify;
)
(
SynthDef("help-SendTrig",{
SendTrig.kr(Dust.kr(1.0), 0, 0.9);
}).send(s);
// "inscription" [register] permettant la réception du message
a = OSCresponderNode(s.addr, '/tr', { arg time, responder, msg;
"reponse de a".postln;
}).add;
b = OSCresponderNode(s.addr, '/tr', { arg time, responder, msg;
"reponse de b".postln;
}).add;
)
(
// "inscription" [register] pour recevoir un message de trig
OSCresponderNode(s.addr,'/tr',{ arg time,responder,msg;
"trigger recu!".postln;
Post << msg <<nl;
}).add;
OSCresponderNode(s.addr,'/tr',{ arg time,responder,msg;
"reaction differente!".postln;
Post << time <<nl;
}).add;
//envoi d'un trig à chaque impulsion
{SendTrig.ar(Impulse.ar(0.5))}.play;
)
//Nettoyage
//le mieux est d'affecter le responder à une variable:
x=OSCresponderNode(s.addr,'/tr',{ arg time,responder,msg; "bang!".postln;}).add
puis
x.remove;
Voir BroadcastServer
Bus <
Index >
Buffers
There are no comments on this page. [Add comment]