Sites


Processing

La lecture du son

Processing est un environnement principalement dédié à la création visuelle. Il n'a pas été conçu au départ pour jouer du son, et encore moins pour générer directement des ondes audio, tel un logiciel comme Pure Data. Par la suite, de nombreuses bibliothèques externes ont été créées pour étendre les capacités sonores de Processing. Ainsi vous pouvez à n'importe quel moment intégrer ces bibliothèques externes dans vos programmes : des synthétiseurs, des sampleurs audio, des interfaces MIDI, des séquenceurs, etc. Sachez toutefois que ce n'est pas la mission de base de Processing davantage centrée sur la génération de formes visuelles.

Dans ce chapitre, nous allons nous familiariser avec un minim de fonctionnalités audio disponibles par défaut dans Processing.

Minim

Il a été décidé à un moment donné d'intégrer dans toute distribution Processing la bibliothèque audio Minim pour pouvoir par défaut jouer des fichiers audio ou capter le son entrant par le microphone. A priori cette bibliothèque est déjà installée sur votre machine. 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 Sketch Library 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 minim

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 via le 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();
}

Si par curiosité vous voulez savoir à quoi sert le mot « this » dans ce programme, sachez qu'il sert à indiquer à Processing que nos instructions s'appliquent à « ce » programme. Minim a besoin de connaître l'adresse de « ce » programme (le nôtre) pour le faire communiquer avec la carte son de notre ordinateur. Encore une fois, si vous ne comprenez pas ce que nous venons de dire, ce n'est pas grave. Sachez seulement que ces mots doivent être écrits au début et à la fin de chaque programme lorsque nous voulons produire du son.

Importer un son

Tout comme les images photographiques ou la typographie, nous allons importer un fichier son dans Processing pour pouvoir le jouer dans notre programme. Pour bien réussir cette étape, nous vous recommandons de sauvegarder d'abord votre sketch.

Nos sons peuvent venir de plusieurs sources : des sons téléchargés, des sons que vous avez créés vous-même via un logiciel comme Audacity, voire des sons que vous pouvez trouver par défaut dans votre système d'exploitation.

Identifiez et sélectionnez à présent le fichier son que vous souhaitez utiliser, et glissez-le directement sur la fenêtre Processing :

Processing Importer un son

Cette action placera le son de ce fichier dans le dossier « data » de votre sketch (un message s'affichant au niveau de la console de Processing vous le confirmera). Si vous voulez voir ce que contient ce dossier, taper sur ctrl-k (Windows/Linux) ou cmd-k (Mac), sinon choisissez dans le menu Sketch > Show Sketch Folder.

Formats audio

Vous pouvez utiliser trois formats audio avec Minim : WAV, AIFF, et MP3. Les deux premiers formats peuvent être exportés par défaut via des logiciels libres comme Audacity. Le troisième format nécessite à ce jour un plug-in pour Audacity, mais celui-ci est relativement facile à installer.

Comme pour les images, les différents formats ont leurs avantages et désavantages.

  1. Les formats WAV et AIFF sont quasi identiques et sont deux formats non compressés. Ils peuvent être lus sans trop de difficultés par Minim, car ils ne requièrent pas de décompression. Ils sont souvent utilisés pour des sons courts, de type bruitage. Pour un morceau de musique de même durée, ces deux formats occupent beaucoup plus de place mémoire que les fichiers au format MP3.
  2. Le format MP3 est un format compressé. Il est souvent beaucoup moins volumineux que les fichiers WAV et AIFF. Par contre, la lecture du format MP3 nécessite plus de ressources de calcul de votre ordinateur, car le fichier doit être décompressé lors de sa lecture. 

Une horloge

Voici un programme simple, qui anime une ellipse avec les secondes de l'horloge de votre ordinateur (l'horloge système). Nous allons utiliser ce programme comme base pour créer une horloge qui sonne toutes les minutes. Pour mieux anticiper cet événement qui se déroule toutes les soixante secondes — car il nécessite une certaine patience — nous allons représenter les secondes par une ellipse qui s'agrandit progressivement depuis le centre de l'espace de dessin.

Sketch Son secondes

void draw() {
  background(255);
  ellipse(50,50,second(),second());
}

Nous utiliserons la valeur des secondes de l'horloge système pour définir les paramètres {largeur,hauteur} de l'ellipse. Si les secondes sont égales à 42, nous aurons une ellipse de 42 x 42 pixels. Si les secondes sont égales à 2, nous aurons une ellipse de 2 x 2 pixels.

Nous pouvons également ajouter une condition pour signaler davantage le changement des minutes : à chaque fois que les secondes reviendront à zéro, nous marquerons l'événement avec un écran rouge.

Sketch horloge rouge

void draw() {

  if (second() == 0) {
    background(255,0,0);
  } else {
    background(255);
  }

  ellipse(50,50,second(),second());
}

La condition if(second() == 0) {} compare les secondes avec la valeur 0. Si les deux sont égales, le fond sera rouge, sinon (else) le fond sera blanc.

Une horloge sonore

Nous allons maintenant sonoriser ce programme en jouant un son à chaque fois que les secondes de notre horloge reviennent à zéro.

Pour commencer, nous allons ajouter autour de notre méthode draw() de l'horloge, toutes les méthodes nécessaires pour la sonoriser (lignes de code mentionnées en gras).

import ddf.minim.*;

Minim minim;
AudioSnippet ping;

void setup() {
  minim = new Minim(this);
  ping = minim.loadSnippet("ping.wav");
}

void draw() {

  if (second() == 0) {

    if (ping.isPlaying() == false){
      ping.play();
    }

    background(255,0,0);

  } else {
    background(255);
  }

  ellipse(50,50,second(),second());
}

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

Attardons-nous sur la structuration de ce sketch :

Processing Code Lire un son 

Ce programme nécessite de nombreuses étapes pour fonctionner :

  1. Importer les fonctionnalités Minim dans notre sketch.
  2. Créer deux variables dont l'une qui contiendra le moteur Minim et l'autre les données audio.
  3. Démarrer le moteur Minim au début du programme.
  4. Copier les données du fichier audio dans notre variable.
  5. Actions conditionnelles : jouer le son et afficher un écran rouge lorsque les secondes sont égales à zéro (vérifier que ce son n'est pas déjà en train de jouer) .
  6. Dessiner une ellipse en fonction de la valeur des secondes de l'horloge.
  7. À la fin du programme, arrêter le son.
  8. À la fin du programme, arrêter Minim.

Nous avons déjà expliqué le démarrage et l'extinction du moteur Minim. Nous n'y revenons pas. Par contre, nous attirons votre attention sur les parties 2, 4 et 5 du programme qui concernent l'importation et la lecture du son.

Tout d'abord, nous avons créé une variable de type AudioSnippet. Le type AudioSnippet est un type de variable défini à l'intérieur du code de Minim. Nous vous rappelons que dans le cas de n'importe quelle variable, la formule pour la déclarer est de la forme {type de la variable} {nom de la variable} = {les valeurs de la variable}. Par exemple, si par un tour de force il était possible d'importer un petit oiseau tout mignon dans Processing, il suffirait d'écrire PetitOiseau pioupiou = loadBird("pioupiou.bird");. En d'autres termes, on écrit d'abord le type de la chose, le nom de la chose, et enfin on lui donne sa valeur. Pour revenir à notre exemple d'horloge sonore, cette valeur est donnée par la fonction loadSnippet() qui va aller chercher les valeurs d'ondes dans le fichier audio et les importera dans notre variable nommée « ping ».

Pour plus d'informations sur les variables et les différents types de variables, reportez-vous au chapitre dédié à ce sujet.

Une fois la variable chargée avec le son, il suffit de le jouer. Dans le cas du AudioSnippet la commande pour jouer un son s'appelle play(). Enfin, il peut être important de vérifier à un moment donné si le son n'est pas déjà en train d'être joué. C'est le rôle de la commande isPlaying() de nous dire si oui (true) ou non (false) nous sommes dans cette situation. Dans notre exemple, si nous avions oublié cette condition, le son se serait lancé pendant soixante fois durant la totalité de la seconde où second() est égal à zéro.

AudioSnippet, AudioSample, AudioPlayer

La bibliothèque Minim distingue plusieurs manières de jouer un son dans Processing. En principe, les instructions à utiliser dépendront de la nature et rôle du son dans votre programme. Si l'on se réfère à la documentation décrivant les fonctionnalités offertes par Minim, un AudioSnippet sera employé pour une lecture simple d'un court extrait sonore, un AudioSample pour une lecture rapide et répétée comme une boîte à rythmes, et enfin un AudioPlayer pour jouer des fichiers audio plus longs (souvent de type MP3) situés directement sur le disque dur de votre ordinateur pour ne pas alourdir encore davantage la mémoire interne du programme. Voici un exemple qui utilise les trois méthodes de lecture du son associées respectivement à trois fichiers audio imaginaires dénommés ping, pop et song.

import ddf.minim.*;

Minim minim;
AudioSample ping;
AudioSnippet pop;
AudioPlayer song;

void setup() {
  minim = new Minim(this);
  ping = minim.loadSample("ping.aiff");
  pop = minim.loadSnippet("pop.aiff");
  song = minim.loadFile("song.mp3");
}

void draw() {

}

void keyPressed() {
  if (key == 'a') ping.trigger();
  if (key == 'b') {
    pop.rewind();
    pop.play();
  }
  if (key == 'c') song.play();
}

void stop() {
  ping.close();
  pop.close();
  song.close();
  minim.stop();
  super.stop();
}

Notez avant tout que les instructions d'importation et de lectures changent selon le type choisi. AudioPlayer et AudioSample utiliseront tous les deux la méthode play() car leur lecture est toujours unique (un seul son à la fois). Par contre, AudioSample nécessite la lecture de nombreux sons simultanés (on peut taper plusieurs fois sur une batterie) et pour cette raison utilise une autre nomenclature,  trigger(), pour décrire le lancement d'un son. En anglais, le mot « trigger » signifie une gâchette.

Documentation

Pour plus d'informations sur les différentes fonctionnalités de Minim, ainsi qu'un grand nombre d'exemples d'utilisation (avec leur code source librement mis à disposition), reportez-vous au site http://code.compartmental.net/tools/minim/ ou à la documentation technique (plus difficile à lire) consultable à l'adresse http://code.compartmental.net/minim/javadoc/ddf/minim/package-tree.html.

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.