Bonjour à tous(tes)
je cherche à faire communiquer Processing et Max via OSC
Mon but est de pouvoir mettre en rapport les coordonnées x,y,z de Processing avec 3 objets integers de Max
pour l'instant la communication fonctionne basiquement mais je ne vois vraiment pas quel code rentrer dans Processing pour qu'il envoie des triplets de coordonnées à Max
Toute aide bienvenue!!!
A
Hors ligne
quelles sont les coordonnées X/Y/Z que tu veux envoyer ?
Hors ligne
Bonjour
merci pour le message!!
en fait je voudrais faire pouvoir faire communiquer MAx et Processing de la manière suivante
dans un scketch processing 3D envoyer les variations des coordonnées de X, Y et Z sur 3 boîtes integers MAx (en inversement que les integers MAx puissent générer des variations de X, Y et Z (tout ça pour une visualisation de certains processus musicaux sur Processing..)
JKe pense que ça passe par OSC par l'intermédiaire de la librairie Processing dédiée mais si je maîtrise bien Max je suis plus que novice sur Processing
merci d'avance!!
Hors ligne
Moi c'est le contraire, je n'ai jamais ouvert Max, il peut envoyer les données comment?
Hors ligne
Hello
bon en retard sur la réponse mais je suis en tournée à l'étranger pour l'instant
pour Max tu envoie les données par un objet qui s'appelle "udpsend" avec commet argument une adresse de type local host (ex "192.168.1.13 ") et un numéro de port...
d'après ce que j'ai compris c'est reçu par Processing par l'intermédiaire d'une librairie dédiée OSC
Donc pour l'instant quand j'envoie de Max des données integer par udpsend, Processing m'indique qu'il les reçoit mais en m'indiquant juste qu'il reçoit des integers... sans m'indiquer lequels!!!!
donc???
bonne soirée
A
Hors ligne
je ne peux pas plus t'aider que ça, mais peut être que ta réponse se trouve sur le site de la libraire, va faire un tour dans le reference : http://www.sojamo.de/libraries/oscP5/
Hors ligne
il faut savoir ce que tu reçois, de ou tu le reçois, en quel format tu le reçois.
Le plus simple est d'installer oscp5, puis de tester les exemples en les adaptant a ta partie max/Msp, et d evoir ce qu'il se passe.
Hors ligne
Bonjour
Merci pour ta réponse...
je te joins une capture d'écran de ce à quoi je suis arrivé : quand je modifie l'integer du patch Max, Processing réagit en m'affichant une ligne "### received an osc message. with address pattern int typetag i" mais ne me donne pas directement l'integer reçu... je pense qu'il y a du code à rajouter sur le sketch mais trop novice sur Processing pour savoir quelles instructions
A
Hors ligne
est ce que tu peux copier un message osc que tu reçois quand tu envoies tes 3 coordonnées depuis max, en utilisant l'exemple :OSCP5broadcastclient , fourni avec la librairie, c'est accessible depuis le menu ouvrir>exemple ?
Ça permet de voir ton message en entier.
Hors ligne
Hello
oui oui ça fonctionne.... mais l'autre question est : comment faire pour que cet integer se transforme en une coordonnées visualisable sur le void processing (genre un point qui se déplace...°
désolé de la naîveté de la questionn!!!
A
Hors ligne
Salut,
Je ne gère pas du tout Max, donc je ne pourrai pas te dire quelles commandes utiliser pour créer des chaînes de caractères à partir de integer mais il faut que depuis max tu fasses un message contenant tes 3 valeurs séparées par un espace:
x+" "+y+" "+z
et dans Processing, tu peux splitter le message qui est reconnu come une chaîne de caractères:
String[] tmp = splitTokens(msg, " "); int x = int(tmp[0]); int y = int(tmp[1]); int z = int(tmp[2]);
Hors ligne
Bonjour tout le monde !
Je me permet de relancer ce topic car je cherche à faire la même chose ( seulement en 2 dimension ).
En reprenant l'exemple: OSCP5broadcastclient, je reçois donc dans la fenetre d'impression les info relative aux message OSC envoyé par Max :
### received an osc message with addrpattern /varY and typetag f
-OscMessage----------
received from /127.0.0.1:60520
addrpattern /varY
typetag f
[0] 171.0
---------------------
### received an osc message with addrpattern /varX and typetag f
-OscMessage----------
received from /127.0.0.1:60520
addrpattern /varX
typetag f
[0] 178.0
Maintenant mon problème consiste à convertir ces valeurs en integer ( int x = /varX et int y = /varY ) afin de les réutiliser dans mon sketch.
Merci pour votre aide
enzo
Dernière modification par enzo (2013-04-16 13:58:51)
Hors ligne
Salut,
peux tu publier ton code processing ?
Hors ligne
Il s'agit de l'exemple cité plus haut dans le topic : OSCP5broadcastclient
/**
* oscP5broadcastClient by andreas schlegel
* an osc broadcast client.
* an example for broadcast server is located in the oscP5broadcaster exmaple.
* oscP5 website at http://www.sojamo.de/oscP5
*/
import oscP5.*;
import netP5.*;
OscP5 oscP5;
/* a NetAddress contains the ip address and port number of a remote location in the network. */
NetAddress myBroadcastLocation;
void setup() {
size(400,400);
frameRate(25);
/* create a new instance of oscP5.
* 12000 is the port number you are listening for incoming osc messages.
*/
oscP5 = new OscP5(this,12000);
/* create a new NetAddress. a NetAddress is used when sending osc messages
* with the oscP5.send method.
*/
/* the address of the osc broadcast server */
myBroadcastLocation = new NetAddress("127.0.0.1",32000);
}
void draw() {
background(0);
}
/* incoming osc message are forwarded to the oscEvent method. */
void oscEvent(OscMessage theOscMessage) {
/* get and print the address pattern and the typetag of the received OscMessage */
println("### received an osc message with addrpattern "+theOscMessage.addrPattern()+" and typetag "+theOscMessage.typetag());
theOscMessage.print();
}
Hors ligne
salut,
Tu affiche donc ton pattern et ton type de valeur. Pour afficher les valeurs en elle même et/ou les affecter à des variables il faut que tu connaisse le type. A priori tu envoie des type float ?
donc pour récupérer x par exemple :
float x = theOscMessage.get(0).floatValue();
Ensuite tu peux les convertir en int :
int xInt = (int)x
tu peux normalement tout cumuler sur la même ligne. Pour plusieurs valeur tu ferais donc un truc du genre :
int x = (int)theOscMessage.get(0).floatValue(); int y = (int)theOscMessage.get(1).floatValue(); int z = (int)theOscMessage.get(2).floatValue();
Dernière modification par Marty (2013-04-17 19:59:19)
Hors ligne