Pure data & Interactivité

Cours 03

  • 06/02/2012 :
    - Quelques exemples d'installations interactives ;
    - Communication OSC entre PD et Processing ;
    - Exemple de traitement du son en PD / action graphique en Pg.
    - Ajout d'un proximètre sur un autre paramètre graphique.
    - Suite des traitements de données en PD pour la gestion des capteurs.
    - Révision de notions.

I - Communication entre PD et Processing

1 - Vérifier les installations

a - Processing

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à.

b - PD

La library OSC est fournie dans la version extended normalement installée dans les machines.

2 - Envoi de données de PD vers Processing

a - But

Utiliser l'enveloppe d'un son, calculée par PD, pour dessiner un graphisme en Processing.

b - Envoi depuis PD

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.

Patch PD

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~.

c - Réception en Pg

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().

d - Tracé d'une forme dépendant du son

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.

Tracé.

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.

 

3 - Envoi de plusieurs données de PD vers Processing

a - But

Utiliser l'enveloppe du son, les données d'un capteur et un oscillateur automatique pour dessiner un graphisme en Processing.

b - Envoi depuis PD

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.

Patch PD

c - Réception en Pg

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().

d - Tracé d'une forme dépendant du son

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é

Tracé.

 

II - Traitement des données / Envoi vers Pg

Comparateur à hysteresis PD - Pointillisme Pg

a - But

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.

b - Envoi depuis PD

PD

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.

c - Réception dans Pg

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.

d - Traitement des données en Pg

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.

bas
Spectateur loin du capteur

haut
Spectateur près du capteur

passage
Passage du spectateur de proche à loin.

 

************************

/|\(;,;)/|\

****************

III - Révisions de notions

1 - Entrée chaude / entrée froide

froid

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.

2 - Autres types d'entrées

04

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