Bonjour !
Voilà, j'ai un problème, je n'arrive pas à faire communiquer Pure Data avec Processing.
J'essaye de faire une connexion Pure Data > Processing, ce dernier modulant des formes en fonction des envois de Pure Data, une connexion Processing > Pure Data étant quasi-inutile.
J'ai essayé cet exemple :
http://learning.codasign.com/index.php? … Processing
Mais en me connectant avec le patch d'exemple Pure Data "Sending a simple message" :
http://en.flossmanuals.net/pure-data/ch065_osc/
Cela me retourne, dans le moniteur de Processing :
### [2014/10/28 9:18:10] ERROR @ OscP5 ERROR. an error occured while forwarding an OscMessage to a method in your program. please check your code for any possible errors that might occur in the method where incoming OscMessages are parsed e.g. check for casting errors, possible nullpointers, array overflows ... . method in charge : oscEvent java.lang.reflect.InvocationTargetException
J'ai beau essayer des trucs, rien n'y fait, je ne comprends pas
Quelqu'un aurait-il une idée ?
Merci beaucoup
Hors ligne
Bonjour,
En fait, dans Processing tu cherches à récupérer trois valeurs avec des types différents. Il suffit d'enlever les deux inutiles pour que cela fonctionne :
import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress myRemoteLocation; void setup() { size(400,400); // start oscP5, telling it to listen for incoming messages at port 5001 */ oscP5 = new OscP5(this, 9001); // set the remote location to be the localhost on port 5001 myRemoteLocation = new NetAddress("127.0.0.1",5001); } void draw() { } void mousePressed() { // create an osc message OscMessage myMessage = new OscMessage("/test"); myMessage.add(123); // add an int to the osc message myMessage.add(12.34); // add a float to the osc message myMessage.add("some text!"); // add a string to the osc message // send the message oscP5.send(myMessage, myRemoteLocation); } void oscEvent(OscMessage theOscMessage) { // get the first value as an integer int firstValue = theOscMessage.get(0).intValue(); // print out the message print("OSC Message Recieved: "); print(theOscMessage.addrPattern() + " "); println(firstValue); }
Hors ligne
ah ça marche merci beaucoup !
Je vais pouvoir creuser plus profondément maintenant
Hors ligne
Euh... mais en fait, si je veux récupérer plusieurs types de messages, à savoir donc des int, des floats et des String, comment puis-je faire dans ce cas ?
Hors ligne
Eh bien tu changes la ligne suivante :
int firstValue = theOscMessage.get(0).intValue();
Par celle de ton choix :
float monFloat = theOscMessage.get(0).floatValue(); String maChaine = theOscMessage.get(0).stringValue();
Hors ligne
D'accord, mais qu'en est-il de la réception de plusieurs messages de mêmes types simultanément ?
De plus, je ne comprends pas trop comment faire pour faire correspondre des valeurs à des variables.
Par exemple, Pure Data envoi un "int" avec comme adresse "/pano", un autre "int" avec "/freq" et un mot "kick".
L'idée étant de pouvoir moduler, par exemple, un rectangle en fonction de ces 3 paramètres :
/pano = taille X
/freq = taille Y
/kick = couleur rouge
Le "kick" étant que le rectangle apparaît rouge uniquement quand le mot "kick" est reçu, les 2 autres valeurs étant sa taille X et Y.
Je ne comprends pas, j'ai beaucoup de mal avec Processing, plus qu'avec Arduino et je ne comprends pas pourquoi.
Hors ligne
Voilà comment procéder :
import oscP5.*; import netP5.*; OscP5 oscP5; int tailleX, tailleY; String couleur; void setup() { size(400, 400); tailleX = 10; tailleY = 10; couleur = ""; oscP5 = new OscP5(this, 9001); } void draw() { background(255); if (couleur.equals("rouge")) { fill(255, 0, 0); } else { fill(0, 0, 0); } rect(50, 50, tailleX, tailleY); } void oscEvent(OscMessage theOscMessage) { if (theOscMessage.checkAddrPattern("/pano") == true) { tailleX = theOscMessage.get(0).intValue(); return; } if (theOscMessage.checkAddrPattern("/freq")) { tailleY = theOscMessage.get(0).intValue(); return; } if (theOscMessage.checkAddrPattern("/kick")) { couleur = theOscMessage.get(0).stringValue(); println(couleur); return; } }
Pour l'envoi du mot il ne faut pas confondre adresse OSC et donnée.
Là, j'ai mis comme adresse /kick et rempli en rouge seulement si la couleur reçue est "rouge".
Hors ligne