Analyser un texte, actionner des sons
Ce script utilise la classe analyse_texte. Ce code écrit pour l’occasion permet de charger un texte, de faire plusieurs type d’analyses et ensuite le parcourir mot à mot ou phrase par phrase. A chaque moment, il est possible de connaitre le nombre de mots, le nombre de lettres. Autant de chiffres qui peuvent être transformés en sons.
La base du code
Une fois le code de la classe installé, on peut le mettre l’activer comme suit.
texte montexte; // déclarer l'objet
montexte=new texte("madame_bovary.txt"); // charger le texte et l'analyser
println("nombre de mots: "+montexte.nombre_mots);
println("nombre de phrases: "+montexte.nombre_phrases);
println ("La phrase chargée : "+montexte.phrase);
println ("Le mot en cours : "+montexte.mot);
montexte est un objet qui contient le texte et les outils pour le manipuler.
montexte.phrase est la phrase actuellement chargée
montexte.mot est le mot actuellement chargé
montexte.mot_suivant() permet de charger le mot suivant dans le texte
montexte.phrase_suivante() permet de charger la phrase suivante
Le fichier zippé "script basique" est un exemple fonctionnel du code suivant.
import processing.sound.*;
SoundFile son;
texte montexte;
int trigger;
int vitesse;
// changer le nom du fichier texte ici
String s="madame_bovary.txt"; // nom du texte
void setup() {
size(600, 600);
// charger les fichiers mp3 ou aif dans "liste"
son = new SoundFile(this, "1.aif");
montexte=new texte(s);
vitesse=200;
// quelques infos sur le texte analysé
println("Dans le texte "+s);
println("nombre de mots: "+montexte.nombre_mots);
println("nombre de phrases: "+montexte.nombre_phrases);
println("nombre de mots dans l'inventaire : "+montexte.inventaire.size());
println("Mot le plus employé : -"+montexte.tri_mot[0]+"- "+montexte.tri_occurence[0]+ " fois");
trigger = millis();
}
void draw() {
if (millis() > trigger) {
background(0);
fill(255);
//montexte.mot_suivant();
montexte.phrase_suivante();
String p=montexte.phrase;
if (combien(p, "madame|mademoiselle|femme|fille|belle|douce|corps|robe|vetement|manches") > 0) {
son.play();
fill(0, 255, 100);
rect(0, 0, width, height);
}
fill(255);
montexte.affiche_stats();
trigger = millis() + vitesse;
}
}
int combien(String p, String query) {
p=p.toLowerCase();
String[] m1=match(p, query);
if (m1 != null) {
return m1.length;
}
return 0;
}