Le code :
import ddf.minim.*;
PFont font;
PImage evans;
float volume;
// A ce seuil l'image est affichée à 100% de sa luminosité
float seuil=4.0;
// initialiser la variable de moyenne
float moyenne=0;
// le tampon determine la ractivité de l'apparition/disparition
int tampon=10;
Minim minim;
AudioInput in;
void setup() {
size(640,480);
frameRate(30);
minim = new Minim(this);
minim.debugOn();
// get a line in from Minim, default bit depth is 16
in = minim.getLineIn(Minim.STEREO, 16);
font = loadFont("DIN-Light-48.vlw");
evans= loadImage("evans.jpg");
textFont(font,24);
noStroke();
}
void draw() {
// volume de l'entrée dans le buffer
volume = in.mix.level()*10;
// moyenne suivant la taille du tampon
moyenne=((moyenne *tampon) + volume)/(tampon+1);
image(evans,0,0,640,480);
// calcul de l'opacité sur base de la moyenne
float fade=map(moyenne,0,seuil,255,0);
fill(0,fade);
rect(0,0,width,height);
// afficher l'info
fill(255);
text("volume : " + volume + ".", 5, 30);
text("Moyenne : " + moyenne + ".", 5, 60);
text("Le seuil : " + seuil + ".", 5, 90);
}
void stop() {
// always close Minim audio classes when you are done with them
in.close();
minim.stop();
super.stop();
}
void keyPressed() {
if (key == CODED) {
if (keyCode == UP) {
seuil+=0.1;
}
else if (keyCode == DOWN) {
seuil -=0.1;
}
}
}On utilise simplement la méthode level(), qui renvoie le volume dans une valeur entre 0 et 1. On multiplie ce chiffre par 10 par commodité.
Il est cependant encore trop fluctuant. On en fait donc une moyenne en prenant un nombre de valeur dans le temps. Une moyenne pour éviter les sautes trop fortes dans le script.
De la on obtient un chiffre utilisable pour différentes actions. Stopper, démarrer des animations, par exemple.
Dans cet exemple il est placé un seuil (4 par défaut) qui peut être ajusté avec les flèches bas et haut.