Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-10-28 09:22:39 Processing, Osc et Pure Data

RoKN
membre
Date d'inscription: 2013-02-21
Messages: 209

Processing, Osc et Pure Data



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 sad

Quelqu'un aurait-il une idée ?
Merci beaucoup smile

Hors ligne

 

#2 2014-10-28 10:24:35 Re : Processing, Osc et Pure Data

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Processing, Osc et Pure Data



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

 

#3 2014-10-28 10:49:35 Re : Processing, Osc et Pure Data

RoKN
membre
Date d'inscription: 2013-02-21
Messages: 209

Re: Processing, Osc et Pure Data



ah ça marche merci beaucoup !
Je vais pouvoir creuser plus profondément maintenant

Hors ligne

 

#4 2014-10-28 11:37:49 Re : Processing, Osc et Pure Data

RoKN
membre
Date d'inscription: 2013-02-21
Messages: 209

Re: Processing, Osc et Pure Data



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

 

#5 2014-10-28 11:42:58 Re : Processing, Osc et Pure Data

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Processing, Osc et Pure Data



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

 

#6 2014-10-28 12:26:42 Re : Processing, Osc et Pure Data

RoKN
membre
Date d'inscription: 2013-02-21
Messages: 209

Re: Processing, Osc et Pure Data



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

 

#7 2014-10-28 16:21:52 Re : Processing, Osc et Pure Data

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Processing, Osc et Pure Data



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

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025