Accueil Interface-Z - Produits - Programmation - Formations - Conseils - Contacts - Liens
Téléchargements :
Patchs Traitement de données : cours02.zip
2 sons et 2 images : media.zip
Patchs PD-Pg : cours03.zip
Patchs lampes : cours04.zip
Modules/exemple : cours05.zip
Processing dispose-t-il de la library oscP5 ?
Si non :
- L'installer dans le sketchbook répertoire /libraries ;
- Si ce n'est pas possible, copier sketchbookz depuis les clefs USB et déclarer ce répertoire comme sketchbook location dans les préférences de Pg ;
- Si cela ne fonctionne pas, copier le répertoire processing-1.5.1 des clefs sur le bureau et utiliser ce processing-là.
La library OSC est fournie dans la version extended normalement installée dans les machines.
Utiliser l'enveloppe d'un son, calculée par PD, pour dessiner un graphisme en Processing.
Lecture d'un son en boucle avec readsf~. Le dessin de la forme repose sur l'idée qu'un son est analysé en continu, il faut donc soit un son long, soit une boucle.
L'enveloppe est un nombre entre 0 et 100 calculé par env~.
L'enveloppe est indépendente du volume de diffusion.
Lancements automatiques au démarrage par loadbang :
- Activation de l'audio par message dsp 1 ;
- Ouverture de la connection réseau sur le port 2200 ;
- Lecture du son.
L'objet réseau n'est pas netsend mais sendOSC, pour des raisons de compatibilité avec la library oscP5 de Processing.
Messages :
-
connect activé une fois, localhost pour rester dans la machine, définir un port (2200) pour s'adresser à l'autre logiciel.
- send utilise une adresse /sonore qui définit l'en-teête du message OSC envoyé et contient $1 qui est remplacé par chaque nouvelle valeur provenant d'env~.
Sketch pd01_pdpg1.
L'idée ici n'est pas de recopier le sketch mot à mot mais de le comprendre.
Library :
import oscP5.*;
import netP5.*;
Variables :
OscP5 oscP5;
float volson;
Setup :
oscP5 = new OscP5(this, 2200);
Fonction de réception :
void oscEvent(OscMessage message_PD) {
if (message_PD.checkAddrPattern("/sonore")==true) {
volson = message_PD.get(0).floatValue();
}
}
Le tri se fait seulement sur l'adresse /sonore pour le moment. Une seule valeur est envoyée pour chaque message OSC.
La valeur est affectée à la variable volson grâce à get.floatValue().
Attention : il y a floatValue() et intValue().
PD n'utiliser théoriquement que des float, mais tout nombre entier envoyé dans ces conditions est automatiquement reconnu comme int et non float en Pg.
Par exemple si on envoie des nombres aléatoires (random) depuis PD, il faut utiliser intValue() pour les recevoir.
L'enveloppe étant constituée de nombres à virgule, on utilise floatValue().
Le sketche trace en continu des lignes qui dessinent une étoile. Le point de départ de toutes les lignes est le centre de la fenêtre graphique.
Le volume sonore est affecté à la variable volson, qui détermine la couleur et la longueur de la ligne.
Le mode de couleur est HSB, pour avoir une variation de tonalité facilement visible.
Les traits anciens sont progressivement atténués par un rect() semi-transparent.
Le tracé utilise la notion de vecteur tournant.
Utiliser l'enveloppe du son, les données d'un capteur et un oscillateur automatique pour dessiner un graphisme en Processing.
Identifier les données.
Donnée | Nom de s/r | Adresse OSC | Variable en Pg | Type |
Enveloppe du son | envel | /sonore | volson | float |
Valeur du capteur | capt | /capt | capteur | int |
Oscillateur | oscille | /oscil | oscille | float |
3 flots de données différents.
Attention aux nombres entiers / à virgule par rapport à la réception en processing.
Sketch pd01_pdpg2.
Library :
import oscP5.*;
import netP5.*;
Variables :
OscP5 oscP5;
float volson, capteur, oscille;
Setup :
oscP5 = new OscP5(this, 2200);
Fonction de réception :
void oscEvent(OscMessage message_PD) {
// Volume sonore
if (message_PD.checkAddrPattern("/sonore")==true) {
volson = message_PD.get(0).floatValue();
}
// Valeurs du capteur
if (message_PD.checkAddrPattern("/capt")==true) {
capteur = float(message_PD.get(0).intValue());
}
// Oscillation aléatoire
if (message_PD.checkAddrPattern("/oscil")==true) {
oscille = message_PD.get(0).floatValue();
}
}
Le tri se fait seulement sur les adresses OSC. Une seule valeur est envoyée pour chaque message OSC.
La valeur est affectée à la variable correspondante grâce à get.floatValue() ou get.intValue().
Attention : il y a floatValue() et intValue().
PD n'utiliser théoriquement que des float, mais tout nombre entier envoyé dans ces conditions est automatiquement reconnu comme int et non float en Pg.
Par exemple les données des capteurs sont reçues par intValue().
Les trois paramètres affectent la couleur des lignes : stroke(volson, capteur, oscille); dans la fonction tracer_rayon.
Paramètre | Paramètre de couleur |
Volume sonore | H Tonalité (et longueur des lignes) |
Valeur du capteur | S Saturation |
Oscillateur | B Luminosité |
Utiliser PD pour passer les données du capteur à travers un comparateur à hystéresis et les envoyer vers Pg. Utiliser Processing pour affecter les valeurs du capteur à un effet pointilliste sur deux images. Le passage d'une image à l'autre dépend du comparateur à hysteresis.
Le seuil moyen est arbitrairement fixé à 60. La largeur entre les deux seuil du comparateur est fixée à 16.
Cela donne un seuil bas de 52 et un seuil haut de 68.
L'état du comparateur à hysteresis (0 ou 1) est envoyé dans un message OSC /hyst.
Les valeurs du capteur, non filtrées sont envoyées dans un message /capt.
Sketch pd02_pdpg.
Placer les images dans le répertoire data du sketch.
Informations envoyées | Assignations en Pg |
Etat du comparateur | Choix de l'image, camomille ou nuage ; Contour ou non des points. |
Valeurs du capteur non filtrées | Taille des points, pour chaque image du plus petit au plus grand. |
La réception des massages OSC se fait comme précédemment. Il s'agit pour les deux variables de nombres entiers.
Etat du comparateur à hystéresis : il est utilisé dans une condition if dans le draw(). 0 correspondant à une image, 1 à l'autre.
Valeurs du capteur : les valeurs sont mises à l'échelle avec un map() en fonction de la position du spectateur.
Si le spectateur est passé au-delà du seuil haut, les données possibles dans cet état vont du seuil bas (52) à 127. Elles sont étalées entre les valeurs smallPoint et largePoint.
Si le spectateur est repassé en-deça du seuil bas, les données possibles dans cet état vont de 0 au seuil haut (68). Elles sont également étalées entre les valeurs smallPoint et largePoint.
Spectateur loin du capteur
Spectateur près du capteur
Passage du spectateur de proche à loin.
************************ /|\(;,;)/|\ **************** |
Entrée chaude : elle prend en compte un paramètre (par exemple un nombre pour +) et active l'objet, qui donne un résultat sur sa sortie. Elle est à gauche. Elle peut aussi réagir à un bang.
Entrée froide : elle met en mémoire un paramètre mais n'active pas l'objet. Les entrées froides sont à droite. Cela permet de prendre en compte tous les paramètres nécessaires à une réponse cohérente de l'objet. Par exemple, on entre des nombres dans les entrées froides du pack et on n'active l'entrée chaude que lorsque tout est correct pour créer le bon message en sortie.
spigot est un portail : ouvert, il laisse passer le flux de données vers sa sortie, fermé il ne laisse rien passer.
l'entrée de droite contrôle l'ouverture et la fermeture (0 pour fermé, autre pour ouvert).
onebang fonctionne aussi sur un pricipe de portail : une fois un bang passé vers la sortie, le onebang se ferme. Il faut un autre bang sur l'entrée de droite (reset) pour réouvrir le portail.
Ce signal de réouverture peut être automatisé, prévu après un délai fixe, ou à la fin d'un fichier son, ou au hasard, ou encore dépendre d'un événement externe (activation d'un capteur par exemple).
************************ /|\(;,;)/|\ **************** |
Cours 02 << ~(oO) ~ >> Cours 04
Téléchargements :
Patchs Traitement de données : cours02.zip
2 sons et 2 images : media.zip
Patchs PD-Pg : cours03.zip
Patchs lampes : cours04.zip
Modules/exemple : cours05.zip