Sites


Processing

L'entrée Microphone

Si votre sketch peut être programmé pour être sensible à l'appui d'une touche du clavier ou au clic de la souris, ce n'est pas la seule forme d'interactivité offerte par Processing. Vous pouvez également donner à votre programme le sens de l'ouïe en vous servant d'un microphone comme oreille et en faisant correspondre des actions du sketch à certains paramètres du son capté.

Nous allons tout d'abord rappeler certaines notions abordées dans le chapitre consacré à la lecture du son pour ensuite nous concentrer plus spécifiquement sur l'ajout d'une source sonore à l'aide d'un microphone.

Minim

Il a été décidé à un moment donné d'intégrer dans toute distribution Processing la bibliothèque audio Minim pour pouvoir jouer au moins des fichiers audio ou capter le son entrant par le microphone. A priori cette bibliothèque (également appelé librairie en jargon informatique) est déjà installée sur votre ordinateur. Pour vérifier sa présence et l'intégrer dans votre programme, il suffit d'aller dans le menu Sketch > Import Library... > Minim audio.

menu_import_minim

Selon votre plate-forme et votre version, à la suite de cette action, Processing ajoutera des lignes de code plus ou moins nombreuses en haut de votre programme. Par défaut, il faut au moins voir affichée l'instruction suivante :

processing_importer

import ddf.minim.*;

C'est cette instruction (que vous pouvez saisir à la main si vous le voulez) qui importera l'ensemble des fonctionnalités de la bibliothèque Minim pour les rendre accessibles à notre programme. C'est à partir de cette instruction import ddf.minim.*; que notre sketch va pouvoir jouer du son.

Configurer minim

Le lancement de notre sketch à l'aide du bouton Run ne suffit pas pour jouer un son. Au préalable, il faut prévoir d'activer les fonctionnalités de gestion audio de Minim (son moteur audio en jargon informatique). Pour jouer un son, Minim doit en effet auparavant demander un accès à la carte son de votre ordinateur. Ne vous inquiétez pas, Minim s'occupe de toute cette cuisine interne pour vous, il suffit de lui dire de s'activer pour cela. Le fait d'avoir activé Minim suppose de prévoir de le désactiver à la fin de notre programme.

Si vous ne comprenez pas tout ce que nous venons de dire, ce n'est pas trop grave. Sachez simplement qu'il faut saisir le code suivant au début de chaque programme utilisant Minim :

import ddf.minim.*;
Minim minim;

void setup() {
  minim = new Minim(this);
}

Et qu'il faut également écrire la fin du programme les instructions suivantes  :

void stop() {
  minim.stop();
  super.stop();
}

Ajouter une source sonore

Pour exploiter l'entrée microphone, nous devons créer un objet source sonore qui permettra d'accéder au son capté par le microphone.

import ddf.minim.*;

Minim minim;
AudioInput in;

void setup() {
  minim = new Minim(this);
  in = minim.getLineIn(Minim.STEREO, 512);
}

Il faut également prévoir d'arrêter la capture du son ainsi que la librairie Minim à la fin de l'exécution du programme. À cet effet, nous employons la méthode stop();

void stop() {
  in.close();
  minim.stop();
  super.stop();
}

Visualiser le niveau sonore

L'objectif à présent est de faire varier la couleur du fond de la fenêtre de l'espace de dessin en fonction des sons captés par le micro. Plus le son sera fort, plus le fond sera blanc. Nous allons utiliser l'objet source audio (in). qui comporte  trois sous objets : left, right et mix. Dans le cas d'un microphone stéréo, ces trois éléments représentent le canal gauche, droit et la moyenne des deux. À partir de ces canaux, il est possible de connaître le niveau sonore du son capté à l'aide de la méthode level() qui retourne au programme cette information sous la forme d'une valeur chiffrée.

 void draw() {
  background(in.mix.level()*2550);
}

Une capture d'écran de l'espace de dessin avec un niveau sonore moyen :

sourcesnor

Un petit jeu

Nous allons à présent créer un jeu très simple qui va exploiter davantage les possibilités d'interaction avec un microphone. Le jeu sera composé d'une balle partant de la gauche de l'écran et qui subit une force d'attraction lente, mais permanente vers cette partie de l'espace de dessin. En faisant du bruit, l'utilisateur va la pousser vers la droite, son but étant de passer la ligne d'arrivée.

Pour commencer, nous allons changer la taille de notre fenêtre de visualisation de l'espace de dessin, activer le lissage du tracé et définir le contour des formes en lui appliquant la couleur blanche. Le code concerné est signalé en gras.

void setup() {
  size(600, 100);
  smooth();
  stroke(255);

  minim = new Minim(this);
  in    = minim.getLineIn(Minim.STEREO, 512);
}

Nous allons ensuite créer une variable qui stockera la position de la balle. Elle sera déclarée en en-tête du programme pour être disponible dans l'ensemble du sketch. Nous lui assignons la valeur 0.

float ballX = 0;

void setup() {
...

Dans la méthode draw(), nous allons définir un fond noir et dessiner une balle qui réagit en fonction du niveau du son. À chaque appel de la méthode draw() nous ajoutons le niveau sonore du microphone à la coordonnée x de la balle. Elle va se mettre en mouvement au fur et à mesure que nous faisons du bruit.

void draw() {
  background(0);

  ballX = ballX + in.mix.level()*20;

  ellipse(25 + ballX, height - 25, 50, 50);
}

soundGame

Pour éviter que la balle ne sorte de l'écran, nous allons ajouter deux conditions qui vont corriger sa position si la variable ballX est plus petite que 0 ou plus grande que la largeur du sketch.

 void draw() {
  background(0);

  ballX = ballX + in.mix.level()*20;

  if (ballX < 0) {
    ballX = 0;
  }

  if (ballX > width-25) {
    ballX = width-25;
  }

  ellipse(25+ballX, height-25, 50, 50);
}

Nous allons ajouter une « ligne d'arrivée » ainsi qu'une condition qui spécifie que si la balle l'a franchi, elle change de couleur.

void draw() {
  background(0);

  ballX = ballX + in.mix.level()*20;

  if (ballX < 0) {
    ballX = 0;
  }

  if (ballX > width-25) {
    ballX = width-25;
  }

  if (ballX > 500) {
    fill(255, 0, 0);
  } else {
    fill(255);
  }
  line(500, 0, 500, 100);
  ellipse(25+ballX, height-25, 50, 50);
}

soundgame2

Afin de compliquer le jeu, nous allons ajouter un comportement à la balle qui la fait revenir en arrière en permanence. À chaque appel de la fonction draw() nous allons diminuer légèrement sa position sur l'axe x.

void draw() {
  background(0);

  ballX = ballX - 0.5;
  ballX = ballX + in.mix.level()*20;

  if (ballX < 0) {
    ballX = 0;
  }

  if (ballX > width - 25) {
    ballX = width - 25;
  }

  if (ballX > 500) {
    fill(255, 0, 0);
  } else {
    fill(255);
  }

  line(500, 0, 500, 100);
  ellipse(25 + ballX, height - 25, 50, 50);
}

À présent, il ne vous reste plus qu'à faire appel à votre imagination pour utiliser du son dans vos projets et en exploiter les nombreuses possibilités : analyse des fréquences d'un son, création d'effets sonores sur mesure à l'aide de fonctionnalités de synthèse audio, etc.

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.