Les outils du workshop
Quelques outils spécifiques accompagnent ce workshop. Ce sont des scripts dont le but est de rendre plus rapide la prise en charge de textes, de sons, d’images à l’intérieur de Processing.
Quatre types de matière première
Lors de ce workshop, l’idée est de produire du son sur base de bits. Bit est la contraction de binary digit, "chiffre binaire". 0 et 1 sont les seuls chiffres utilisés dans le stockage des données informatiques. Les textes, images, sons, vidéos, les mails et tout les autres contenus stockés sur votre ordinateur n’est qu’un ensemble de données binaires.
Lors de ce workshop, nous allons transformer une partie de ces informations en son. Nous partirons principalement de trois sources :
– des images
– des textes
– des fichiers quelconques
– du son provenant d’un micro
Dans cette perspective, nous avons préparé plusieurs scripts dans le logiciel Processing qui permettront de prototyper rapidement des petites applications.
Ces scripts peuvent être téléchargés dans cette même section.
La fonction "Loadbytes()"
C’est une fonction de base de Processing. Elle permet de charger un fichier en mémoire, quel qu’il soit, et d’en lire les bytes, c’est à dire des octets, c’est à dire une suite de 8 informations. Ne pas confondre un byte avec un bit, qui est une information unique qui peut être un ou zéro.
b = loadBytes(source);
for (int i = 0; i < b.length; i++) {
// bytes est un chiffre de -128 à 127
//ce code le convertit en chiffre de 0 à 255
int a = b[i] & 0xff;
print(a + " ");
}
On a donc accès à une longue suite de chiffres (souvent des millions) allant de 0 à 255.
La classe "piximage"
Codée pour l’occasion, cette classe permet de charger une image en mémoire et de la parcourir pixel par pixel ou rang par rang. Pour chaque pixel, on dispose de 4 chiffres :
– l’intensité du rouge, entre 0 et 255
– l’intensité du vert, entre 0 et 255
– l’intensité du bleu, entre 0 et 255
– la luminosité du pixel, entre 0 et 255 (attention, en float)
String source="poisson.jpg"; // le fichier source
piximage i; // déclarer l'objet
// on charge l'image, et on désigne la zone dans laquelle l'afficher
// ici en position x 10, y 10,
// sur une largeur de 160 pixels et la hauteur de toute la hauteur moins 20 pixels
void setup() {
size(600,600);
i =new piximage(source, 10, 10, 160, height-20);
}
void draw() {
background(255);
i.afficher(); // afficher l'image à l'endroit choisi et le pixel actuel
// choisir comme couleur de remplissage la luminosité
// un seul chiffre, du gris donc
fill(i.luminosite);
// dessiner un carré avec cette couleur
rect(200, 200, 50, 50);
println("la luminosité est "+i.luminosite);
// dessiner des carrés montrant la valeur individuelle
// du rouge, vert et bleu
fill(i.rouge, 0, 0);
rect(200, 250, 50, 50);
fill(0, i.vert, 0);
rect(200, 300, 50, 50);
fill(0, 0, i.bleu);
rect(200, 350, 50, 50);
i.next_pix(); // demander à voir le pixel suivant
}
Notez qu’il existe aussi une méthode
– i.next_row() qui permet de sauter d’un rang.
– i.afficher_rang() qui permet d’afficher le rang en cours
– i.afficher_progression() qui permet d’afficher l’image et le rang actuel
Plusieurs exemples sont fournis sur son utilisation
La classe texte
Ce script permet de charger un texte, et le prépare pour différents types de scripts : il découpe en phrases, découpe en mots et permet d’accéder à ces éléments un par un. Il crée aussi un inventaire de tous les différents mots employés, et les trie par récurrence.
La classe liste_fichiers
On donne à ce script l’emplacement où chercher, le type de fichier recherché, et il renvoie une liste (un array) d’éléments correspondant à la demande.
Cette classe permet à Processing de disposer de la liste des sons (ou d’autres types de fichiers, par ailleurs) déposés dans un dossier spécifique de votre script. Il restera à partir de là à les charger dans la mémoire vive pour pouvoir les jouer.