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é.

Librairie Sound

Il a été décidé à un moment donné d'intégrer dans toute distribution Processing une bibliothèque sonore pour pouvoir jouer au moins des fichiers audio ou capter le son entrant par le microphone. À 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 > Importer une librairie... > Sound.

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 :

import processing.sound.*;

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 Sound pour les rendre accessibles à notre programme.

Ajouter une entrée micro

Pour exploiter l'entrée microphone, nous devons créer un objet de type AudioIn (ce mot-clé est défini et accessible par l'importation de la librairie Sound) qui permettra d'accéder au son capté par le microphone. Cet objet est construit en passant mot clé this (qui fait référence au programme en cours, en quelque sorte l'entrée audio va être « réservée » pour ce programme) et l'index de « channel » (dans notre exemple, la valeur 0). Cet index permet de sélectionner l'entrée audio dans le cas du choix possible de plusieurs sources sonores. Par défaut, nous mettons la valeur qui doit correspondre à priori au micro de votre ordinateur 

import processing.sound.*;

AudioIn input;

void setup() 
{ input = new AudioIn(this, 0);
input.start(); }

Pour l'instant, nous avons simplement indiqué à Processing que nous souhaitions faire un lien entre le micro et notre code à travers l'objet input. Nous sommes donc prêt à utiliser ce lien pour, par exemple, analyser le volume d'entrée du micro.
Cette opération va se faire à travers un autre type d'objet de la librairie Sound, l'objet Amplitude. Sans rentrer dans les détails, cet objet va avoir pour tâche de calculer l'amplitude du volume qui entre dans votre micro et vous délivrer une valeur comprise entre 0 (silence) et 1 (« beaucoup de son »)
Cet objet doit être mis en relation avec notre entrée micro. Nous pourrions avoir plusieurs entrées micro et plusieurs analyses d'amplitude associées. Cette association se fait via la méthode input() sur l'objet de type Amplitude.

import processing.sound.*;

AudioIn micro;
Amplitude amp; void setup()
{ micro = new AudioIn(this, 0);
micro.start();
amp = new Amplitude(this);
amp.input(micro); }

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 donc utiliser cette objet de type Amplitude avec sa méthode analyze(), qui renvoit une valeur entre 0 et 1.

void draw() 
{ background(amp.analyze() * 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. Nous allons utiliser la même initialisation que dans l'exemple précédent, avec nos deux objets de type AudioIn et Amplitude respectivement.

Nous allons 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 + amp.analyze() * 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 + amp.analyze() * 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 + amp.analyze() * 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 + amp.analyze() * 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.