Annonce

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


#1 2013-07-08 17:17:17 OSC envoie toujour une valeur

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

OSC envoie toujour une valeur



bonjour

je fais actuellement un patch qui selectionne 4 lecteur wave pour les faire jouer dependament de la valeur dune variable de 0 a 3 sur Pure data

la commende de la variable arrive de processing via OSC

mon probleme est que quand je lance tous mes programme (processing et pure data)
la fonction [sel #] envoie toujours des bang ce qui fais redémarrer le sample a chaque bang recu

si jutilise des message dans mon patch pour dire [0  (,  si je pèse dessus il me sort uniquement 1 bang donc jusque la tous fonctionne mais j ai l impression que processing envoi le chiffre "0" 5 fois par seconde via OSC

il y a t il un moyen pour que processing envoie juste une fois le chiffre 0 ?

merci
a+

Hors ligne

 

#2 2013-07-08 17:32:23 Re : OSC envoie toujour une valeur

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: OSC envoie toujour une valeur



Salut,

as tu mis ton instruction (envoi OSC) dans ta fonction draw() ? si oui c'est normal puisque cette fonction est une boucle infinie. Placer alors ton code dans un if et ne le déclencher qu'en fonction d'une condition que tu auras fixé. Tu peux aussi le mettre dans setup() qui lui n'est exécuté qu'une fois au démarrage. Mais tout dépend de ce que tu attend de ton programme et quand/comment tu veux communiquer avec PD...

Hors ligne

 

#3 2013-07-08 18:07:40 Re : OSC envoie toujour une valeur

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: OSC envoie toujour une valeur



Salut

oui justement il est dans le draw ..... maintenant je comprend

j ai une fonction Osc() que je declare dans draw car mes autre variable faut qu il sois répéter

donc esce que je peut mettre une condition dans mon void Osc () Je mexplique

OscMessage myFidMp3 = new OscMessage("/fid0Mp3");
         myFidMp3.add(mp3State[0]);
         myFidMp3.add(mp3State[1]);
         myFidMp3.add(mp3State[2]);
         myFidMp3.add(mp3State[3]);
//   if(rotAngle10 != rotAngle10) {                <--   es ce que je peut faire sa comme sa ?
         myFidMp3.add(rotAngle10); }
         myFidMp3.add(volAngle10);
         myFidMp3.add(tobjState[10]);
       oscP5.send(myFidMp3, myRemoteLocation);

en gros j ai besoin d un si la valeur de "rotAngle" change envoi la nouvelle variable

merci
a+

Hors ligne

 

#4 2013-07-10 22:30:44 Re : OSC envoie toujour une valeur

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: OSC envoie toujour une valeur



salut tous le monde

bon j ai essayer de le mettre dans un if mais aussitôt que la condition est rempli il envoi a pure data encore en boucle du au draw() je sais plus quoi faire je suis a cour d idée

auriez vous une solution ?

merci
a+

Hors ligne

 

#5 2013-07-10 23:05:35 Re : OSC envoie toujour une valeur

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: OSC envoie toujour une valeur



Qu'est-ce que tu veux faire exactement ?
Quel sont les actions que tu souhaites pour ton programme ? son déroulé ?
Sois plus précis et aiguille nous sinon on ne peut pas trop t'aider

Hors ligne

 

#6 2013-07-12 13:18:50 Re : OSC envoie toujour une valeur

vic
membre
Date d'inscription: 2013-06-03
Messages: 152

Re: OSC envoie toujour une valeur



sinon, si t'y arrive spas dans processing, tu peux utiliser [change] dans pd qui évitera les répétitions de nombre. Cependant c'est une solution moyennement élégante, t'auras toujours torp de ressources affectées à l'envoi de ta valeur depuis Processing ce qui peut avoir des conséquences déplaisantes pour le cpu ; mais ça fonctionnera.

Hors ligne

 

#7 2013-07-12 17:13:43 Re : OSC envoie toujour une valeur

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: OSC envoie toujour une valeur



salut a tous

merci VIC pour ta réponse mais vue que je fais un logiciel de musique de type "reactable" le moin de Charge cpu je prend le mieux c'est non ?

voici mon code (juste une parti) mais désoler il n est pas balisé je suis pas rendu la ses sur que j aurais pu le faire au fur et a mesure mais bon 

import TUIO.*;
import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;
TuioProcessing tuioClient;
fidGui[] fidGui = new fidGui[100];
fid_fonction[] fid_fonction = new fid_fonction[100];

String[] fileName;
String mp3 = "nada";

float songTime;
int I;
int nada; 
int circlex=25;
int circley=-2;
int circleSize = 60;
int SIZE = 69;
int sineWave0 = 1 , squareWave0 = 0, sawWave0 = 0, noiseWave0 = 0;
int sineWave1 = 1 , squareWave1 = 0, sawWave1 = 0, noiseWave1 = 0;
int[] tobjState; 
int[] mp3State;
int[] parametreMp3;
int[] midiNote = new int[10];
int[] songNumero = new int[5];
int[] mp3_PD_State = new int[20];

float xpostcurScreen,ypostcurScreen;
float xposTcur,yposTcur,yposTcur1;
float circleX, circleY;
float[] rotAngle = new float[100];
float angle = 0,angle1 = 0;
float[] fidXpos = new float[100];
float[] fidYpos = new float[100];
float[] fidXposScreen = new float[100];
float[] fidYposScreen = new float[100];
float[] volAngle;
float[] getAngle = new float[100];
float BPM = 120;     
float millisPerBeat = 1000/(BPM/60.0);
float cursor_size = 15;
float object_size = 60;
float table_size = 760;
float scale_factor = 1;
float volume;
PFont font;
float volAngle0, volAngle1, volAngle2, volAngle3, volAngle10;
float rotAngle0, rotAngle1, rotAngle2, rotAngle3, rotAngle10;
   
boolean[] parametreWave; 
boolean nadabool;
boolean parametreWavebool = false;    
boolean parametreInstrumentbool = false, parametreInstrumentbool1 = false;
boolean tcurState = false;

boolean overRect(float x, float y, float width, float height)  {
  if (xpostcurScreen >= x && xpostcurScreen <= x+width && 
      ypostcurScreen >= y && ypostcurScreen <= y+height ) {
    return true;
  } else {
    return false;
   }}
  
void setup()
{
  //size(screen.width,screen.height);
  size(640,480);
  noStroke();
  smooth();
  loop();
  hint(ENABLE_NATIVE_FONTS);
  font = createFont("Arial", 18);
  scale_factor = height/table_size;

  tuioClient  = new TuioProcessing(this);
  oscP5 = new OscP5(this,9996);
  myRemoteLocation = new NetAddress("127.0.0.1",9997);
  
  parametreWave = new boolean[5];
    for (int i = 0; i < 5; i++) { 
    parametreWave[i] = false; }
    
  volAngle = new float[100];
    for (int i = 0; i < 100; i++) {
    volAngle[i] = 0; }
  
  fileName = new String[20];
    for (int i = 0; i < 20; i++) {
    fileName[i] = "File.Mp3"; }
    
  parametreMp3 = new int[5];
    for (int i = 0; i < 5; i++) {
    parametreMp3[i] = 0; }
    
  tobjState = new int[100];
    for (int i = 0; i < 100; i++) { 
    tobjState[i] = 0; }
  
  mp3State = new int[4];
    for (int i = 0; i < 4; i++) { 
    mp3State[i] = 0; }
}
  
void draw()
{
   midiNote[2] = int(getAngle[2]);
   midiNote[3] = int(getAngle[3]);
   songNumero[0] = int(getAngle[10]);
   songNumero[1] = int(getAngle[11]);
   songNumero[2] = int(getAngle[12]);
   songNumero[3] = int(getAngle[13]);
   songNumero[4] = int(getAngle[14]);
   background(125,125,255);
   textFont(font,18*scale_factor);
  
  centerCircle();
  tempo();
  Tobject();
  Tcursor();
  Osc();

//*******FID # 0 a 3**********************************
fidGui[0] = new fidGui(fidXpos[0],fidYpos[0],fidXposScreen[0], fidYposScreen[0], rotAngle[0],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen);
fid_fonction[0] = new fid_fonction(fidXpos[0],fidYpos[0],fidXposScreen[0], fidYposScreen[0], rotAngle[0],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,nada,volAngle[0],nada,nada,nada);
fidGui[1] = new fidGui(fidXpos[1],fidYpos[1],fidXposScreen[1], fidYposScreen[1], rotAngle[1],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen); 
fid_fonction[1] = new fid_fonction(fidXpos[1],fidYpos[1],fidXposScreen[1], fidYposScreen[1], rotAngle[1],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,nada,volAngle[1],nada,nada,nada);
fidGui[2] = new fidGui(fidXpos[2],fidYpos[2],fidXposScreen[2], fidYposScreen[2], rotAngle[2],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen); 
fid_fonction[2] = new fid_fonction(fidXpos[2],fidYpos[2],fidXposScreen[2], fidYposScreen[2], rotAngle[2],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,midiNote[2],volAngle[2],nada,nada,nada);
fidGui[3] = new fidGui(fidXpos[3],fidYpos[3],fidXposScreen[3], fidYposScreen[3], rotAngle[3],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen); 
fid_fonction[3] = new fid_fonction(fidXpos[3],fidYpos[3],fidXposScreen[3], fidYposScreen[3], rotAngle[3],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,midiNote[3],volAngle[3],nada,nada,nada);
//***********FID # 10 a 14*****************************
fidGui[10] = new fidGui(fidXpos[10],fidYpos[10],fidXposScreen[10], fidYposScreen[10], rotAngle[10],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen);
fid_fonction[10] = new fid_fonction(fidXpos[10],fidYpos[10],fidXposScreen[10], fidYposScreen[10], rotAngle[10],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,nada,volAngle[10],songNumero[0],parametreMp3[0],songTime);
fidGui[11] = new fidGui(fidXpos[11],fidYpos[11],fidXposScreen[11], fidYposScreen[11], rotAngle[11],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen);
fid_fonction[11] = new fid_fonction(fidXpos[11],fidYpos[11],fidXposScreen[11], fidYposScreen[11], rotAngle[11],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,nada,volAngle[11],songNumero[1],parametreMp3[1],nada);
fidGui[12] = new fidGui(fidXpos[12],fidYpos[12],fidXposScreen[12], fidYposScreen[12], rotAngle[12],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen);
fid_fonction[12] = new fid_fonction(fidXpos[12],fidYpos[12],fidXposScreen[12], fidYposScreen[12], rotAngle[12],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,nada,volAngle[12],songNumero[2],parametreMp3[2],nada);
fidGui[13] = new fidGui(fidXpos[13],fidYpos[13],fidXposScreen[13], fidYposScreen[13], rotAngle[13],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen);
fid_fonction[13] = new fid_fonction(fidXpos[13],fidYpos[13],fidXposScreen[13], fidYposScreen[13], rotAngle[13],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,nada,volAngle[13],songNumero[3],parametreMp3[3],nada);
fidGui[14] = new fidGui(fidXpos[14],fidYpos[14],fidXposScreen[14], fidYposScreen[14], rotAngle[14],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen);
fid_fonction[14] = new fid_fonction(fidXpos[14],fidYpos[14],fidXposScreen[14], fidYposScreen[14], rotAngle[14],xposTcur,yposTcur,xpostcurScreen,ypostcurScreen,nada,volAngle[14],songNumero[4],parametreMp3[4],nada);
//println();
}

void addTuioObject(TuioObject tobj) {
  println("add object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle());
  tobjState[tobj.getSymbolID()] = 1;
}

void removeTuioObject(TuioObject tobj) {
  
  println("remove object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+")");
  tobjState[tobj.getSymbolID()] = 0;
}

void updateTuioObject (TuioObject tobj) {
  println("update object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle()
          +" "+tobj.getMotionSpeed()+" "+tobj.getRotationSpeed()+" "+tobj.getMotionAccel()+" "+tobj.getRotationAccel());
}

void addTuioCursor(TuioCursor tcur) {
  println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
  tcurState = true;
}

void updateTuioCursor (TuioCursor tcur) {
  println("update cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY()
          +" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel());
}

void removeTuioCursor(TuioCursor tcur) {
  println("remove cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+")");
  tcurState = false;
}

void refresh(TuioTime bundleTime) { 
  redraw();
}

void Osc() {
OscBundle myBundle = new OscBundle();
OscMessage myFidOsc = new OscMessage("/fid0Param");
         myFidOsc.add(rotAngle0);
         myFidOsc.add(volAngle0);
         myFidOsc.add(sineWave0);
         myFidOsc.add(squareWave0);
         myFidOsc.add(sawWave0);
         myFidOsc.add(noiseWave0);
         myFidOsc.add(tobjState[0]);
       oscP5.send(myFidOsc, myRemoteLocation);
myBundle.add(myFidOsc);
myFidOsc.clear();
myFidOsc.setAddrPattern("/fid1Param");
         myFidOsc.add(rotAngle1);
         myFidOsc.add(volAngle1);
         myFidOsc.add(sineWave1);
         myFidOsc.add(squareWave1);
         myFidOsc.add(sawWave1);
         myFidOsc.add(noiseWave1);
         myFidOsc.add(tobjState[1]);
       oscP5.send(myFidOsc, myRemoteLocation);
myBundle.add(myFidOsc);
myFidOsc.clear();
myFidOsc.setAddrPattern("/fid2Param");
         myFidOsc.add(rotAngle2);
         myFidOsc.add(volAngle2);
         /*myFidOsc.add(sineWave2);
         myFidOsc.add(squareWave2);
         myFidOsc.add(sawWave2);
         myFidOsc.add(noiseWave2);*/
         myFidOsc.add(tobjState[2]);
       oscP5.send(myFidOsc, myRemoteLocation);
myBundle.add(myFidOsc);
myFidOsc.clear();
myFidOsc.setAddrPattern("/fid3Param");
         myFidOsc.add(rotAngle3);
         myFidOsc.add(volAngle3);
         /*myFidOsc.add(sineWave3);
         myFidOsc.add(squareWave3);
         myFidOsc.add(sawWave3);
         myFidOsc.add(noiseWave3);*/
         myFidOsc.add(tobjState[3]);
       oscP5.send(myFidOsc, myRemoteLocation);
OscMessage myFidMp3 = new OscMessage("/fid0Mp3");
         myFidMp3.add(mp3State[0]);
         myFidMp3.add(mp3State[1]);
         myFidMp3.add(mp3State[2]);
         myFidMp3.add(mp3State[3]);
         myFidMp3.add(songNumero[0]); //****************** SES CETTE VALEUR QU IL NE FAUT PAS REPETER
         myFidMp3.add(volAngle10);
         myFidMp3.add(tobjState[10]);
       oscP5.send(myFidMp3, myRemoteLocation);
       println(rotAngle10);
}
void oscEvent(OscMessage theOscMessage) {  

  if (theOscMessage.checkAddrPattern("/mp3Duration") && theOscMessage.checkTypetag("f")) {
    songTime = theOscMessage.get(0).floatValue();  }
}

en gros la variable "songNumero[0]" est en fonction de la rotation du fid il a une valeur de 1 a 4 ses cette variable qui faut qui gere quel lecteur dans pure data est en marche donc quand je met la valeur 1 il faut envoyer 1 bang a pure data si je met 2 un autre bang et ainsi de suite mais la si il est sur 1 il envoi toujours des bang et meme chose pour le 2, 3 et 4 ce qui provoque dans pure data un "mini bug audio "comme si on fesais un reset et que le fichier recommence toujours au debut

merci
a+

Dernière modification par imdidi (2013-07-12 17:16:12)

Hors ligne

 

#8 2013-07-12 17:25:57 Re : OSC envoie toujour une valeur

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: OSC envoie toujour une valeur



Pourquoi ne pas initialiser tes FID dans le setup et mettre à jour les valeurs si elles changent ?
Ici à chaque boucle draw() tu rcrée un objet et donc tu rappelle le constructeur de l'objet. Tu dois pouvoir modifier les valeurs sans recréer d'objet avec new.

Hors ligne

 

#9 2013-07-12 17:41:49 Re : OSC envoie toujour une valeur

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: OSC envoie toujour une valeur



salut a tous

alors je devrais mettre tous mes instance de class dans setup ?

et si oui comment je fais pour mettre les valeurs a jour quand elle change (desole pour la question de newbie lol)

Hors ligne

 

#10 2013-07-12 17:48:52 Re : OSC envoie toujour une valeur

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: OSC envoie toujour une valeur



C'est préférable oui. Un objet est créé une seule fois.
Ensuite tu met à jour les valeurs (attibuts) avec des fonctions (méthodes) de ta classe.

Comment est définie ta classe FID ?

Hors ligne

 

#11 2013-07-12 17:57:27 Re : OSC envoie toujour une valeur

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: OSC envoie toujour une valeur



ok merci je vais faire la correction il me faut juste savoir comment updater

voici le code de ma class fid_Gui

  class fidGui {
  
  float obj_size = object_size*scale_factor;
  float fidposX, fidposY, fidposScreenX, fidposScreenY, fidAngle;
  float tcurposX, tcurposY, tcurposScreenX,tcurposScreenY;
  float paramcircleX = fidposX_()+14,paramcircleY = fidposY_()+30, paramcircleSize = 15;
  boolean tcurStatee;
  boolean parametreWave_;
  boolean parametreInstrumentbool_, parametreInstrumentbool1_;
  
 fidGui(float _fidposX, float _fidposY, float _fidposScreenX, float _fidposScreenY, float _fidAngle, float _tcurposX, float _tcurposY,
 float _tcurposScreenX,float _tcurposScreenY) {
    fidposX = _fidposX;
    fidposY = _fidposY;
    fidposScreenX = _fidposScreenX;
    fidposScreenY = _fidposScreenY;
    fidAngle = _fidAngle;
    tcurposX = _tcurposX;
    tcurposY = _tcurposY;
    tcurposScreenX = _tcurposScreenX;
    tcurposScreenY = _tcurposScreenY;
    

   
  }
  float fidposX_()  {
    return fidposX;   }
    
  float fidposY_()  {
    return fidposY;   }
  
  float fidposScreenX_() {
    return fidposScreenX;  }
  
  float fidposScreenY_() {
    return fidposScreenY;  }
    
  float fidAngle_() {
    return fidAngle;  }
    
  float tcurposX_() {
    return tcurposX;  }
    
  float tcurposY_() {
    return tcurposY;  }
    
  float tcurposScreenX_() {
    return tcurposScreenX;  }
    
  float tcurposScreenY_() {
    return tcurposScreenY;  }
//**************************************************************************************************    
   void fidGUI() {

    float a = map(fidAngle_(),0,6.30,1.5,4.8);
    pushMatrix();
    pushStyle();
         noFill();
         stroke(255,255,255,130);
         strokeWeight(4);
         strokeCap(ROUND);
         arc(fidposX_()-3,fidposY_(),70,70,1.5,4.8);
         arc(fidposX_()-3,fidposY_(),70,70,1.5,(a)%4.8);
         arc(fidposX_(),fidposY_(),70,70,5.5,7);
                   
    popStyle();
    popMatrix();
  }
//*********************************************************************  
  void imagesiWave() {
    pushMatrix();
    pushStyle();
    fill(255,255,255);
    textSize(10);
     text("Si",7,-29);
     popStyle();
     popMatrix();
}
//****************************************************************
void imagesqWave() {
    pushMatrix();
    pushStyle();
    fill(255,255,255);
    textSize(10);
     text("Sq",7,-29);
     popStyle();
     popMatrix();
}
//********************************************************************
void imagesaWave() {
 
    pushMatrix();
    pushStyle();
    fill(255,255,255);
    textSize(10);
     text("Sa",7,-29);
     popStyle();
     popMatrix();
}
//***********************************************************************
void imagenoWave() {
    pushMatrix();
    pushStyle();
    fill(255,255,255);
    textSize(10);
     text("Wn",6,-29);
     popStyle();
     popMatrix();
}


  }

Hors ligne

 

#12 2013-07-12 18:29:08 Re : OSC envoie toujour une valeur

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: OSC envoie toujour une valeur



Si tu as une classe MaClasse par exemple avec des attributs x, y, z.
Tu déclare un objet : MaClasse monObjet;

tu peux ensuite modifier ces attributs de plusieurs facons :

- soit en affectant directement la valeur si les attributs sont en public: dans ta classe

- soit en créant des méthodes permettant de les modifier. Par exemple setX(int _x) :

void setX(int _x) {
    x = _x;
}

Il te reste ensuite à ajouter une méthode, disons update(), que tu déclenche quand tu le souhaites dans ton draw. Dans cette méthode tu appelle ta fonction fidGUI(.....) avec tes paramètres qui sont les attributs de ta classe. Que ces attributs aient changé ou non.

Dans ton draw tu auras donc :

quand tu veux modifier une valeur :

monObjet.x = 10;
monObjet.y = 50;
monObjet.z = 0;

puis après ton traitement tu fais une mise à jour, en fin de boucle draw par exemple :

monObjet.update();

Dernière modification par Marty (2013-07-12 18:30:21)

Hors ligne

 

#13 2013-07-12 19:54:55 Re : OSC envoie toujour une valeur

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: OSC envoie toujour une valeur



ok Merci beaucoup je vais faire les modification requise

Dernière modification par imdidi (2013-07-12 19:55:12)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024