A › 13 - Son

Bibliothèque minim

Il est possible de rajouter du son dans les animations de Processing. Pour augmenter les fonctionnalités de base de Processing, il existe des bibliothèques (librairies) externes. Minim est une bibliothèque audio qui permet la manipulation du son dans l’environnement Processing. Elle est accessible par le menu Sketch >> Import Library, puis sélectionner minim.

Suite à cette action, l'instruction suivante est affichée au début du code : import ddf.minim.*;. La bibliothèque minim est alors importée dans le programme avec ses fonctionnalités.

La ligne suivante doit être placée dans le setup(): minim = new Minim(this);

Classe AudioPlayer

Minim comporte une classe nommée AudioPlayer, qui permet de charger un fichier son puis de le jouer.

  • Première étape : enregistrer le fichier son dans le dossier "data" lié au programme par le menu Sketch >> add file, puis choisir l'adresse du fichier son à importer. Les formats WAV, AIFF, MP3 sont acceptés. On peut aussi glisser directement le fichier son sur la fenêtre Processing. Cette action place le fichier son dans le dossier "data" du sketch.
  • Deuxième étape : créer un objet de la classe AudioPlayer qui contiendra les données audio. Cette déclaration est à réaliser hors du setup() et du draw() grâce à l'instruction AudioPlayer nomDuSon;
  • Troisième étape : charger le son enregistré dans le dossier "data" dans le fichier-son de type AudioPlayer, grâce à la fonction loadFile("nomDuFichierSon.format"). Cette étape, qui n'est réalisée qu'une fois, peut être réalisée dans le setup().

    nomDuSon = minim.loadFile("nomDuFichierSon.format");

  • Quatrième étape : jouer le son, grâce à la fonction play();

    nomDuSon.play();


A la fin du programme, la fonction stop() permet de fermer chaque classe. Les fichiers-son sont fermés individuellement.

void stop(){

  nomDuSon.close();

  minim.stop();

  super.stop();

}

Compléments

  • La fonction loop() permet de lire le fichier-son en boucle : nomDuFichier.loop();

  • Le fichier son peut être lu un nombre défini de fois, par exemple : nomDuFichier.loop(4); permet de lire 4 fois le fichier son.

  • La fonction pause() permet de mettre en pause le fichier son : nomDuFichier.pause();

  • La fonction rewind() permet de "rembobiner" le fichier son, pour que la lecture reprenne au début : nomDuFichier.rewind();

  • La fonction length() permet de connaître la durée du fichier son en millisecondes : nomDuFichier.length();

  • La fonction sampleRate() permet de connaître la fréquence d'échantillonnage du fichier son : nomDuFichier.sampleRate();

Exemples

Un exemple : choisir un fichier son, et l'ajouter au dossier data d'un nouveau sketch processing : ce fichier sera désigné ici sous le nom exemple.mp3

import ddf.minim.*;

Minim minim; // création d'un objet de la classe Minim

AudioPlayer exemple;

void setup() {

  minim = new Minim(this); // 'this' fait référence à l'application en cours

  exemple = minim.loadFile("exemple.mp3");

}

void draw() {

  background(128);

  if (key == 'c') exemple.play(); // key est la dernière touche activée du clavier

  if (key == 'p') exemple.pause();

}

void stop() {

  exemple.close();

  minim.stop();

  super.stop();

}

Autre exemple : télécharger le son click.mp3 (réalisé par FreeSFX) à associer à un programme réalisé dans le parcours B7. Placer ce son dans le dossier "data" d'un nouveau sketch processing, et exécuter le programme ci-dessous, pour associer un son à chaque rebond de la bille contre une paroi :

import ddf.minim.*;

Minim minim; // création d'un objet de la classe Minim

AudioPlayer click;

int x,y ;

int pas = 1 ;

void setup() {

  size(200,200)

  noStroke();

  x=width/4; // abscisse de départ de la balle

  y=height/3; // ordonnée de départ de la balle

  minim = new Minim(this); // 'this' fait référence à l'application en cours

  click = minim.loadFile("click.mp3");

}

void draw() {

  fill(155,25,35,20);

  rect(0,0,width, height); // on recouvre la fenêtre d'un rectangle semi-transparent

  fill(255); // blanc

  ellipse (x,y,30,30); // dessin de la balle

  x=x+pas; // chaque exécution de draw() modifie la valeur de x

  if (x>=width-15) {

    pas = -1; // on change le sens de progression

    click.play(); // on lit le fichier son

    click.rewind(); // on "rembobine" au début du fichier

  }

  else if (x<=15){

    pas = 1; // on change le sens de progression

    click.play(); // on lit le fichier son

    click.rewind(); // on "rembobine" au début du fichier

  }

}

void stop() {

  exemple.close();

  minim.stop();

  super.stop();

}

Tout savoir sur Minim

L'ensemble des fonctions disponibles pour la classe Audioplayer, et les autres classes de Minim, sont décrites dans une documentation, en anglais, disponible en ligne. Les possibilités sont bien plus grandes que celles décrites sur cette page, qui ne présente qu'un petit aperçu (suffisant néanmoins pour beaucoup d'applications).