Annonce

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


#1 2019-12-11 04:43:50 keyPressed

fabzefab66
membre
Date d'inscription: 2015-12-01
Messages: 18

keyPressed



Bonjour,

J'essaie d'organiser mon programme, mais je suis confronté à un problème:
je voudrais que certaines touches du clavier ne fassent qu'une seule action. seulement toutes les touches du clavier agissent en passant à ma liste d'image alors que je veux que la touche espace, ou les touches gauche, droite. Je suis sur Mac Sierra. Il y a-t-il une spécification?
Voici le code:

import processing.sound.*;
import oscP5.*;
import netP5.*;
PImage startscreen;
int stage;
int instrumental;
PFont title; 
OscP5 oscP5;
NetAddress myRemoteLocation;
int n = 10;
PImage[] images = new PImage[n]; // appelle d'une liste d'image
WhiteNoise noise;
BandPass filter;
int x = 0;
int r;
float y = 0;
float z = 0;
int j =0;

void setup() {
stage = 1;
  size(800,600);
  background(0);
  noStroke();

title = loadFont("Helvetica-48.vlw");
textFont(title,35);
// Create the noise generator + Filter
  noise = new WhiteNoise(this);
  filter = new BandPass(this);

for(int i=0; i<n; i++) {
images[i] = loadImage("marey_" + i + ".jpg"); //Boucle
}
  frameRate(30);
  /* start oscP5, listening for incoming messages at port 12000 */
  oscP5 = new OscP5(this,12000);
 
  /* myRemoteLocation is a NetAddress. a NetAddress takes 2 parameters,
   * an ip address and a port number. myRemoteLocation is used as parameter in
   * oscP5.send() when sending osc packets to another computer, device,
   * application. usage see below. for testing purposes the listening port
   * and the port of the remote location address are the same, hence you will
   * send messages back to this sketch.
   */
  myRemoteLocation = new NetAddress("127.0.0.1",12001);
}


void draw() {
  rect(j, height*0.2, 1, height*0.6);
  j = j + 2;
   
if(stage==1){ background(0);
startscreen = loadImage("marey.jpg");
  image (startscreen,0,0, width,height);           //page d'entrée
textAlign(CENTER);
fill(100,100,100);
text("Sonomage", 500,150);
text("Appuyez sur 'n' pour commencer", 500,200);
text("en cliquant et en se déplaçant avec la souris", 500,250);
text("écoutez ce qu'il se passe", 500,300);
text("Appuyez sur 'espace' pour tester une autre image", 500,350);
text("Appuyez sur 'b' ou 'v' pour tester un autre niveau", 500,400);
text("Appuyez sur 'x' pour revenir au début", 500,450);
}
//fin page d'entrée

if(stage==2){synthese ();
image(images[r], 0, 0, width, height);}
//fin du 1er niveau type: "spectral"

if(stage==3){instrumental();
image(images[r], 0, 0, width, height);

}//fin du 2ème niveau type: "instrumental"

if(stage==4){concret();
image(images[r], 0, 0, width, height);}//fin du 3ème niveau type: "concret"
if (key == 'b') {
stage = 3;
background(0);
startscreen = loadImage("marey.jpg");
  image (startscreen,0,0, width,height);
  textAlign(CENTER, CENTER);
fill(100,100,100);
text("Niveau dit 'instrumental'", 500,150);
text("Appuyez sur 'q', 's' ou 'd'", 500,200);
text("pour sélectionner vos sons", 500,250);
text("puis écoutez toujours", 500,300);
text("en cliquant et en se déplaçant avec la souris", 500,350);
int mute = 0;
OscMessage m12 = new OscMessage("/mute");
  m12.add(mute);
  oscP5.send(m12, myRemoteLocation);
}
if (key == 'n') {
stage = 2;
background(0);
image (startscreen,0,0, width,height);
int mute = 0;
OscMessage m12 = new OscMessage("/mute");
  m12.add(mute);
  oscP5.send(m12, myRemoteLocation);
}
if (key == 'v') {
stage = 4;
background(0);
image (startscreen,0,0, width,height);
}
if (key == 'x') {
stage = 1;
}} 
void mouseReleased(){
if (stage==2 || stage==3 || stage==4) { //stop the noise generator and the filter
  noise.stop();
  filter.stop();
OscMessage m2 = new OscMessage("/stop");
  int stop=0;
  m2.add(stop);
oscP5.send(m2, myRemoteLocation);}

}

void keyPressed(){
 
if (stage==2 || stage==3 || stage==4){

  if(keyCode == LEFT){   
    r--;
    if(r<0) r= images.length-1;
  }

  if(keyCode == RIGHT || key == ' '){ 
    r++;
  if (r>= images.length) r = 0;
  }
}
if (stage==3){if (key == 'q') {
int q = 1;
OscMessage m5 = new OscMessage("/q");
  m5.add(q);
  oscP5.send(m5, myRemoteLocation);
}
if (key == 's') {
int s = 1;
OscMessage m6 = new OscMessage("/s");
  m6.add(s);
  oscP5.send(m6, myRemoteLocation);
}
if (key == 'd') {
int d = 1;
OscMessage m7 = new OscMessage("/d");
  m7.add(d);
  oscP5.send(m7, myRemoteLocation);
}}else{keyPressed=false;}}

void synthese () {if (mousePressed == true)//nouveau niveau type:"spectral"
  {noise.play(1);
  filter.process(noise);
  float frequency = map(z, 0, 255, 20, 15000);
  float bandwidth = map(y, 255, 0, 4000, 1);
filter.freq(frequency);
  filter.bw(bandwidth);
 
  color a = get(mouseX,mouseY);//récupération des données couleurs
   float c = red(a);
   float f = blue(a);
   float e = green(a);

if (c>f && c>e)//conditions pour le rouge
{z = 20+(f+e)/2; y = c;}
if (f>c && f>e)//conditions pour le bleu
{z = 255-(c+e)/2; y = f;}
if (e>c && e>f)//conditions pour le vert
{z = 127+(f+c)/e; y = e;}
else if(e==f && c==e)
{z = e; y = e;}

}
}

void instrumental(){
  {if (mousePressed == true){
color a = get(mouseX,mouseY);//récupération des données couleurs
   float c = red(a);
   float f = blue(a);
   float e = green(a);
   OscMessage m = new OscMessage("/c");
  OscMessage m1 = new OscMessage("/push");
    OscMessage m3 = new OscMessage("/f");
      OscMessage m4 = new OscMessage("/e");
  m4.add(e);
  m3.add(f);
  m.add(c);
  m1.add(mousePressed);/* add an int to the osc message */

  /* send the message */
  oscP5.send(m, myRemoteLocation);
  oscP5.send(m1, myRemoteLocation);
  oscP5.send(m3, myRemoteLocation);
  oscP5.send(m4, myRemoteLocation);
}
}}
void concret(){{if (mousePressed == true)//nouveau niveau type:"concret"
{
color a = get(mouseX,mouseY);//récupération des données couleurs
   float c = red(a);
   float d = blue(a);
   float e = green(a);
   OscMessage m8 = new OscMessage("/c1");
  OscMessage m9 = new OscMessage("/push1");
    OscMessage m10 = new OscMessage("/d1");
      OscMessage m11 = new OscMessage("/e1");
  m11.add(e);
  m10.add(d);
  m8.add(c);
  m9.add(mousePressed);/* add an int to the osc message */

  /* send the message */
  oscP5.send(m8, myRemoteLocation);
  oscP5.send(m9, myRemoteLocation);
  oscP5.send(m10, myRemoteLocation);
  oscP5.send(m11, myRemoteLocation);
}}}

Hors ligne

 

#2 2019-12-11 05:24:14 Re : keyPressed

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

Re: keyPressed



Bonjour,

je n'ai pas bien compris ta demande. Peux-tu la préciser et comme tu as des images, il serait bien de les avoirs. Tu peux compresser le dossier de ton programme et le joindre à ton message.

Des suggestions néanmoins.
Tu devrais mettre cette ligne dans le setup(() :
    startscreen = loadImage("marey.jpg");

Tu gères l'appui des touches dans le Draw() et dans la méthode kePpressed. Il serait préférable de tout mettre dans la méthode keyPressed()

Hors ligne

 

#3 2019-12-11 17:13:49 Re : keyPressed

fabzefab66
membre
Date d'inscription: 2015-12-01
Messages: 18

Re: keyPressed



Merci de ta réponse, voici le prog. compressé.
J'ai essayé de tout mettre dans KeyPressed, mais les touches ne répondaient pas correctement.

Hors ligne

 

#4 2019-12-11 17:27:55 Re : keyPressed

fabzefab66
membre
Date d'inscription: 2015-12-01
Messages: 18

Re: keyPressed



La ligne: startscreen = loadImage("marey.jpg"); est dans le setup() au niveau de (stage 1) qui est ma "page d'acceuil".
Les autres (stages) sont différents "niveaux" de traitement. Les touches n, b, v doivent lancer le niveau désiré. Ce qui est le cas. Par contre, quand on actionne la touche b, on est dans le (stage 3), et les touches q, s, d actionnent différents sont en communicant avec PureData. Seulement une fois qu'on lance un (stage), n'importe quelle touche du clavier lance la première image de ma liste, alors que je veux pouvoir les lancer avec soit la barre d'espace, soit les flèches gauche ou droite.

Hors ligne

 

#5 2019-12-11 18:32:46 Re : keyPressed

fabzefab66
membre
Date d'inscription: 2015-12-01
Messages: 18

Re: keyPressed



pardon, j'ai oublié que j'avais supprimé cette ligne: startscreen = loadImage("marey.jpg");. Ca n'a pas l'air de changer quoi que ce soit.

Hors ligne

 

#6 2019-12-12 20:36:18 Re : keyPressed

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

Re: keyPressed



Bonsoir,

Je ne vois pas le dossier compressé.
Une erreur de manip !

Hors ligne

 

#7 2019-12-13 09:32:15 Re : keyPressed

fabzefab66
membre
Date d'inscription: 2015-12-01
Messages: 18

Re: keyPressed



le fichier est trop lourd, même le data

Dernière modification par fabzefab66 (2019-12-13 09:34:11)

Hors ligne

 

#8 2019-12-13 09:46:42 Re : keyPressed

fabzefab66
membre
Date d'inscription: 2015-12-01
Messages: 18

Re: keyPressed



Sinon voici un lien pour le télécharger:
https://www.dropbox.com/s/lmycn94pepx6p … 4.zip?dl=0

Hors ligne

 

#9 2019-12-18 10:33:50 Re : keyPressed

fabzefab66
membre
Date d'inscription: 2015-12-01
Messages: 18

Re: keyPressed



Pour finir, j'ai trouvé une solution: J'ai juste intégré le fond de ma "page d'accueil" nommée "startscreen" pour l'intégrer dans ma liste d'image, et je remet à 0 la liste à chaque fois qu'on lance les différents "stage". Comme ça seul le texte d'entré disparaît lorsqu'on appuie sur une touche. On peut le retrouver en appuyant sur la touche désirée.
Maintenant je dois trouver comment rendre mon patch puredata autonome avec tous mes sons...

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024