Bonjour à tous,
Je suis étudiant en Design Graphique, et dans le cadre d'un projet de cours, je dois réaliser une installation interactive.
Premier problème, c'est que je suis relativement novice sur processing. Deuxième problème et conséquence : mon programme marche moyennement...
Alors voilà le projets : il y a deux vidéos ; l'une joue par défaut, et l'autre remplace la première lorsque l'utilisateur intervient. Jusque là, j'ai réussi en utilisant simplement myMovie.stop() et myMovie.play() pour passer d'une vidéo à l'autre. Le problème est que la transition est évidemment trop brutale. J'aimerais que la transition sois beaucoup plus douce, afin qu'elles puissent se mélanger par transparence pendant quelques instants.
J'ai fait pas mal de recherches et impossible de trouver une explication... Pas mal d'explications sur les images (que j'ai appliqué sans succès), mais rien sur les vidéos...J'ai tenté de faire varier l'alpha progressivement, le problème étant qu'à un moment donné l'image se bloque, et qui plus est elle ne remplace jamais vraiment l'autre. De plus, les sons ne disparaissent pas, ce qui rend la chose cacophonique.
Je vous donne mon code, je pense que ce sera beaucoup plus compréhensible :
import processing.video.*;
Movie theMov;
Movie theMov2;
int alphaCount;
int alphaVal = 255;
void setup() {
size(600, 600);
theMov = new Movie(this, "vidéo1.mov");
theMov.loop();
theMov2 = new Movie(this, "vidéo2.mov");
theMov2.loop();
}
void draw() {
image(theMov,0,0,width,height);
image(theMov2, 0,0,width,height);
tint(255,alphaVal);
if (keyPressed && alphaVal >= 0){
image(theMov2, 0,0,width,height);
alphaVal -=5;
}
else if (alphaVal <255) {
alphaVal +=5;
}
println(alphaVal);
}
void movieEvent(Movie m) {
m.read();
}
PS : pour pouvoir travailler le code chez moi, j'ai enlevé la partie avec Arduino et utilise KeyPressed pour remplacer l'événement utilisateur.
Je vous avoue qu'à partir d'un certain moment j'ai commencé à bidouiller par-ci par-là en croisant les doigts pour que ça fonctionne... Ça dépasse mes connaissances.
Je vous remercie vraiment de prendre un peu de temps pour m'aider
Hors ligne
Bonjour,
Pour la transition de la vidéo, j'ai introduit la variable transition qui prend trois valeurs -1, 0, et 1.
-1 quand c'est une transition de sortie, 0 quand il n'y en a pas et 1 quand c'est une transition d'entrée.
Je suppose que quand le spectateur n'interagit plus c'est la première vidéo qui revient au premier plan.
J'ai aussi fait des transition sonore en utilisant la méthode volume de la classe Movie.
Hors ligne
Salut,
Ça fonctionne parfaitement lorsque l'on touche sur une touche, cependant, dans l'idée de mon projet, la deuxième vidéo (test2) apparaît pendant tant que l'on presse la touche, puis disparaît lorsqu'on ne la presse plus, laissant la première vidéo (test1) revenir au premier plan.
Dans la réalité du projet, le bouton est une chaise connectée à Arduino. La vidéo test1 est au premier plan, puis lorsqu'on s’assoit (et tant que l'on reste assis), la vidéo test2 est au premier plan ; lorsqu'on se lève (et que la touche n'est plus pressée), test1 revient au premier plan.
Tant que j'utilisais keyPressed comme un événement, cela fonctionnait ainsi ; mais avec keyPressed en tant que fonction, je vous avoue que je m'y perds un peu. Comment faire en sorte que test2 s'affiche tant que la touche est pressée, puis disparaît lorsqu'elle est relâchée ?
Et surtout comment remettre tout ça avec Arduino au lieu de keyPressed ? J'utilisais : transi.digitalRead(10) == transi.HIGH afin d'indiquer lorsque la deuxième vidéo devait passer au premier plan, et ce tant que cette instruction était vrai, c'est-à-dire tant que l'utilisateur était assis sur la chaise et fermait le circuit.
Mon code quelque peu archaïque ressemblait à ça au début avec Arduino (je vous donne juste un extrait pour ne pas trop vous perdre):
void draw() { canvas.beginDraw(); canvas.image(test, 0,0,width,height); if (transi.digitalRead(10) == transi.HIGH) { test.pause(); canvas.image(test2, 0,0,width,height); test2.play(); image(canvas, 0, 0); } else { test2.pause(); test.play(); } }
(J'utilise canvas car je projette le programme en tant réel.)
Un très grand merci en tout cas pour votre aide et votre éclairage
Hors ligne
Il faut alors, avoir une variable d'état et une autre qui recèle l'état précédent. C'est en comparant ces deux variables que l'on trouve le changement d'état.
Pour ton programme il faut décommenter la première ligne du draw()
Hors ligne
Bonjour,
J'ai pu tester le programme avec Arduino, et celui-ci fonctionne parfaitement !
J'ai eu quelque peu de mal à brancher mon Processing à Arduino, mais j'ai fait des recherches à ce sujet et il me semble que c'est un problème assez récurrent.
Un grand merci Mushussu pour ton aide.
Hors ligne