Bonjour à tous,
dans le cadre d'un projet étudiant, j'execute la manipulation suivante :
j'importe deux images (l'une sur l'autre) et via une interaction par le son, celle se trouvant en premier plan
disparait lentement (en transparence) afin qu'on ne puisse plus voir que la seconde image (celle en second plan):
en clair, plus le volume transmis au microphone est fort, plus la première image s'efface jusqu'à ce que le volume soit suffisament élévé pour qu'elle disparaisse totalement.
Du coup, j'aimerais maintenant non pas jouer avec 2 images mais 3.
Cela consisterait donc en parlant dans le micro pour faire disparaitre l'image 1 et laisser apparaitre l'image 2, il faudrait du coup reparler une seconde fois pour qu'à son tour l'image 2 laisse place à l'image 3 : le problème dans ma manipulation est qu'en parlant pour faire disparaitre l'image 1, l'image 2 disparait en même temps et laisse apparaitre directement l'image 3.
Il faudrait rentrer un code permettant à l'image 2 d'interargir avec la maniputlation en question, seulement
lorsque l'image 1 a disparu entièrement.
Mon programme a actuellement cette forme :
--
import ddf.minim.*;
int volume = 255;
float seuil = 0.2;
PImage image1;
PImage image2;
PImage image3;
Minim minim;
AudioInput in;
void setup() {
size(500,650);
minim = new Minim(this);
minim.debugOn();
in = minim.getLineIn(Minim.STEREO, 512);
}
void draw() {
if(volume*seuil>0) volume = int(map(in.mix.level(), 0, seuil, 255, 0));
image1 = loadImage("image1.jpg");
image2 = loadImage("image2.jpg");
image3 = loadImage("image3.jpg");
tint(255);
image(image3,0,0,500,650);
tint(255,volume);
image(image2,0,0,500,650);
tint(255,volume);
image(image1,0,0,500,650);
}
void mousePressed() {
volume = 255;
}
void stop(){
in.close();
minim.stop();
super.stop();
}
--
Si quelqu'un pouvait m'éclairer sur ce qui ne va pas.
D'avance merci
Hors ligne
Peut-être n'est ce pas assez clair ?
Hors ligne
hop une petite ébauche… j'espère que ça pourra t'aider… C'est un peu crado, mais ça marche.
import ddf.minim.*; PImage[] image = new PImage[3]; float volume; int curseur; float canalyseur; float seuil = 200; Minim minim; AudioInput in; void setup() { size(500, 650); image[0] = loadImage("image1.jpg"); image[1] = loadImage("image2.jpg"); image[2] = loadImage("image3.jpg"); minim = new Minim(this); minim.debugOn(); in = minim.getLineIn(Minim.STEREO, 512); } void draw() { canalyseur += in.mix.level(); volume = map(in.mix.level(), 0.0, 0.9, 0, 255); if(volume >= seuil && curseur < image.length - 1 && canalyseur >= 20){ curseur += 1; canalyseur = 0; } switch(curseur){ case 0: tint(255, 255); image(image[0], 0, 0); tint(255, volume); image(image[1], 0, 0); break; case 1: tint(255, 255); image(image[1], 0, 0); tint(255, volume); image(image[2], 0, 0); //delay(500); break; case 2: tint(255, volume); image(image[2], 0, 0); tint(255, volume); image(image[2], 0, 0); break; } } void stop() { in.close(); minim.stop(); super.stop(); }
Hors ligne
Super merci, ça marche effectivement !
En revanche, le seul souci est qu'une fois que l'image 1 disparait, l'image 2 subit une légére saccade. Cela doit être à cause du son transmis pour faire disparaitre la première image et je pense qu'il faudrait une fois que cette dernière a disparue, initié un délai de une à deux secondes avant d'autoriser l'image 2 à être sensible au son du microphone afin d'éviter ce léger défaut.
Je ne sais pas si c'est possible par contre mais encore merci de m'avoir aidé.
Hors ligne
C'est possible d'interrompre une commande un léger instant (1s) ?
En tous cas, je ne connais pas la formule dans mon cas
Hors ligne
Hmm… Quelque chose dans cet ordre là ? (edit) C'est un brin plus élégant, je ne sais pas si ça t'avances ou si ça te donnes des idées.
import ddf.minim.*; PImage[] image = new PImage[3]; float volume; int curseur; float canalyseur; float seuil = 210; Minim minim; AudioInput in; void setup() { size(500, 650); image[0] = loadImage("image1.jpg"); image[1] = loadImage("image2.jpg"); image[2] = loadImage("image3.jpg"); minim = new Minim(this); minim.debugOn(); in = minim.getLineIn(Minim.STEREO, 512); } void draw() { canalyseur += in.mix.level(); volume = map(in.mix.level(), 0.0, 0.9, 0, 255); if (volume >= seuil && curseur < image.length - 1 && canalyseur >= seuil/10) { volume = 0; curseur += 1; canalyseur = 0; } afficherImg(curseur); } void afficherImg(int indexImage) { tint(255, 255); image(image[indexImage], 0, 0); // IMG EN DESSOUS tint(255, volume - seuil / 3); if (indexImage < 2) { image(image[indexImage + 1], 0, 0); // IMG EN DESUS } else { tint(255, volume - seuil / 3); image(image[indexImage], 0, 0); // SI DERNIERE IMG, EN DESSUS } } void stop() { in.close(); minim.stop(); super.stop(); }
Dernière modification par jojolaglaise (2016-02-01 21:51:56)
Hors ligne
Allez une dernière pour la route, je pense qu'avec ça tu pourras perfectionner un peu le bazar :
import ddf.minim.*; PImage[] image = new PImage[3]; float volume; int curseur; float canalyseur; float seuil = 230; //ICI (de 0 a 255) //POUR ADOUCIR ANIMATION float volumeLisse; float alpha = 0.7;//ET ICI (de 0.1 a 0.9) Minim minim; AudioInput in; void setup() { size(500, 650); image[0] = loadImage("image1.jpg"); image[1] = loadImage("image2.jpg"); image[2] = loadImage("image3.jpg"); minim = new Minim(this); minim.debugOn(); in = minim.getLineIn(Minim.STEREO, 512); } void draw() { canalyseur += in.mix.level(); volume = map(in.mix.level(), 0.0, 0.9, 0, 255); volumeLisse = (1 - alpha) * volume + alpha * volumeLisse; //LISSAGE if (volume >= seuil && canalyseur >= seuil/10 && curseur < image.length - 1) { volume = 0; curseur += 1; canalyseur = 0; } afficherImg(curseur); } void afficherImg(int indexImage) { tint(255, 255); image(image[indexImage], 0, 0); // IMG EN DESSOUS tint(255, volumeLisse); if (indexImage < 2) { image(image[indexImage + 1], 0, 0); // IMG EN DESSUS } else { tint(255, volumeLisse); image(image[indexImage], 0, 0); // SI DERNIERE IMG, EN DESSUS } } void stop() { in.close(); minim.stop(); super.stop(); }
Ici l'animation est plus fluide; j'ai utilisé un barycentre entre deux valeurs (voir la ligne n°29). Pour ajuster la réactivité du sketch, tu peux modifier la valeur des variables seuil et alpha.
Dernière modification par jojolaglaise (2016-02-01 22:15:53)
Hors ligne
Merci
Hors ligne
Merci de poster ici le code final après amélioration " Made in " Jojolaglaise" " .
Sinon ... dénonciation auprès du chargé de T.D.
Dernière modification par sakramh (2016-02-01 23:34:24)
Hors ligne
"C'est en copiant qu'on invente"
Paul Valery
Hors ligne
Hors ligne
héhé ça fait beaucoup de guillemets pour un seul commentaire, "sakramh" ;-) !
Pourtant j'avais cru que tu n'aimais pas """python""" :p
Hors ligne