Salut à tous,
J'essaye de récupérer un message Osc dans Supercollider à partir de Openframeworks sous ubuntuStudio 12.04.
Voici le code dans SC :
( t =(); t.ecouteur = OSCresponder(nil, "/yell", {arg time, adr, msg ;var txt; if(msg[0] != 'status.reply') { txt = msg; txt.postln; "hello".postln; };}) )
Il me compile le code mais ne donne aucun message à chaque fois que j'envoie le message.
J'ai même essayer avec un sketch ultra-simple dans Processing :
import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress myRemoteLocation; int on = 1; void setup() { size(104, 118); oscP5 = new OscP5(this, 12000); myRemoteLocation = new NetAddress("127.0.0.1", 57120); frameRate(1); } void draw(){ OscMessage myMessage = new OscMessage("/yell"); myMessage.add(on); oscP5.send(myMessage, myRemoteLocation); print(on); }
et rebelotte toujours aucune réponse.
Le problème est dans Sc, mais où ?
Hors ligne
Une histoire de bundle OSC peut-être ?
Je ne connais pas bien tous ces langages, mais j'ai déjà eu des moments de crise à cause des bundles OSC.
Dernière modification par pob (2012-08-31 18:04:09)
Hors ligne
En fait Oscresponder est déprécié depuis la version 3.5, maintenant ils conseillent d'utiliser OSCdef.
Alors voici mon code :
n = NetAddr("127.0.0.1", 57120);
o = OSCdef(\osc, {|msg| msg[1].postln}, '/vitesse', n);
Seulement je n'arrive pas à accéder à valeur de OF pour l'envoyer dans ce synth
(
SynthDef("vent",{ arg freq, out = 0, vitesse;
freq = SinOsc.kr(vitesse, 600, 800);
Out.ar( out, SendTrig.kr(Impulse.kr(4), 0, freq);
SinOsc.ar(freq, 0, 0.3) ! 2;
)}).add;
)
a = Synth("vent").play;
a.set("vitesse", o.]);//c'est ici que ça coince.
C'est une bétise mais je suis bloqué.
Merci pour l'aide.
Hors ligne
matthieu a écrit:
En fait Oscresponder est déprécié depuis la version 3.5, maintenant ils conseillent d'utiliser OSCdef.
Alors voici mon code :
n = NetAddr("127.0.0.1", 57120);
o = OSCdef(\osc, {|msg| msg[1].postln}, '/vitesse', n);
Seulement je n'arrive pas à accéder à valeur de OF pour l'envoyer dans ce synth
...
a = Synth("vent").play;
a.set("vitesse", o.]);//c'est ici que ça coince.
C'est une bétise mais je suis bloqué.
Merci pour l'aide.
salut mathieu
il faut que tu fasses ca dans la `function' de ton OSCdef (non testé):
( n = NetAddr("127.0.0.1", 57120); o = OSCdef(\osc, { |msg| a.set(\vitesse, msg[1]; }, '/vitesse', n) )
Autre erreur, pour les noms de paramètres de ton Synth, il faut utiliser des Symbol et non des String:
\vitesse // Symbol 'vitesse' // Symbol "vitesse" // String
y
Hors ligne
OK,
merci pour les précisions.
Depuis lors j'ai changé mon fusil d'épaule, j'utilise l'addon OfxSupercolllider pour communiquer.
J'ai juste un petit problème.
Je voudrais mettre un if pour qu'il s'exécute juste une foi dans un synth.
Voici mon code de base qui ne fonctionne pas :
( a = Buffer.read(s, "/home/mathieu/OF/apps/myApps/ plaid.wav"); b = SynthDef("SONG",{arg bufnum, out, ok = 0; if(ok == 1,{Out.ar( out, PlayBuf.ar(2, bufnum, BufRateScale.kr(bufnum)))} )}).store; ) plaid->set("ok", 1); // ce que j'envoie en continu depuis openFrameworks
Quelqu'un sur la mail list me revoie à cette page http://supercollider.sourceforge.net/wi … a_SynthDef
Mais j'avoue ne pas savoir que faire.Ça te dit quelque chose ?
Hors ligne
matthieu a écrit:
OK,
merci pour les précisions.
Depuis lors j'ai changé mon fusil d'épaule, j'utilise l'addon OfxSupercolllider pour communiquer.
J'ai juste un petit problème.
...
Mais j'avoue ne pas savoir que faire.Ça te dit quelque chose ?
En fait il me semble que tu mixes plusieurs concepts...
- un SynthDef n'est pas un Synth: un SynthDef est la "représentation" d'un instrument, un Synth est une instance de cet instrument, qui le joue.
Il faudrait plus de code pour voir ce que tu fais exactement, ce que tu viens de poster n'a pas beaucoup de sens helaas
Un autre détail, il ne faut pas mettre de logique dans le code pour le Server, mais la mettre dans le code pour le langage:
s.boot; // server ( SynthDef(\foo, { |out=0, gate=1| var snd = SinOsc.ar(444, 0, 0.3); var env = EnvGen.kr(Env.perc, gate, doneAction: 2); Out.ar(out, snd * env) }).add ) // language ( fork{ inf.do{ |i| i.postln; if(i.asInteger.odd, { Synth(\foo) }); 1.wait; } } )
Plus d'info sur ce concept (très important dans SuperCollider..: http://doc.sccode.org/Guides/ClientVsServer.html
y
Hors ligne
Pages: 1