Jump to: navigation, search

Processing - Puredata, datamapping

Processing-puredata-data-mapping.png

Cet exemple montre la marche à suivre pour expérimenter rapidement différents comportements d'un sketch processing grâce à patch puredata.

La raison de coupler ces deux programmes permet de s'appuyer sur leurs forces respectives dans l'optique de faciliter un prototypage rapide.

  • Processing est optimal pour le protoypage d'applications graphiques. Son désavantage est l'obligation d'arrêter le programme pour faire la moindre correction.
  • Puredata permet de programmer sans devoir recompiler le programme. Il contient aussi de nombreux éléments d'interfaçage (UI, midi, etc.) le rendant idéal pour la visualisation et le mapping de données.

Télécharger le zip: File:Processing-puredata-data-mapping.zip

Processing

La méthode consiste à ne mettre que le minimum nécessaire dans le sketch.

Ce minimum inclus:

  • variables utilisées dans le draw
    • PVector circlepos; // position du cercle dans la fenêtre
    • float circlerad; // rayon du cercle
    • color circlecolor; // couleur de remplissage du cercle
  • l'envoi de la position souris à chaque draw
  • l'ouverture d'un port d'écoute

L'envoi de la position de la souris se fait à chaque draw.

 OscMessage outm = new OscMessage( "/mouse" );
 outm.add( mouseX * 1.f );
 outm.add( mouseY * 1.f );
 oscin.send( outm, oscout_address );

Les messages OSC entrants permettent de confgurer toutes les variables utilisées lors du dessin. Le namespace du cercle est donc naturellement préfixé par /circle.

if ( msg.checkAddrPattern( "/circle/x" ) ) {
   circlepos.x = msg.get( 0 ).floatValue();
 } else if ( msg.checkAddrPattern( "/circle/y" ) ) {
   circlepos.y = msg.get( 0 ).floatValue();
 } else if ( msg.checkAddrPattern( "/circle/rad" ) ) {
   circlerad = msg.get( 0 ).floatValue();
 } else if ( msg.checkAddrPattern( "/circle/color" ) ) {
   circlecolor =  color( 
     msg.get( 0 ).intValue(),
     msg.get( 1 ).intValue(),
     msg.get( 2 ).intValue(),
     msg.get( 3 ).intValue()
   );
 }

En lançant le programme, rien ne se passe. Le sketch ne contient aucune logique temporelle ou interactive. C'est tout pour processing. Le travail est maintenant à faire du côté puredata.

Puredata

La position souris étant envoyée dans puradata, nous pouvons l'utiliser pour contrôler n'impore quelle variable du cercle.

Le patch dans l'exemple montre quelques possibilités de mapping de ces informations. Voir les groupes:

  • mouse X > X;
  • mouse X > Y;
  • mouse Y > Y.

Dans ces cas, la position est directement envoyée au cercle.

Dans le groupe rotation X Y, la position souris est utilisée pour faire varier la vitesse et le rayon de rotation du cercle.

Dans le dernier groupe, color, la couleur évolue linéairement à des vitesses différentes selon les canaux. Un slider permet de gérer la transparence.

Le groupe general clock est une sorte de métronome global permettant, par exemple, de faire tourner le cercle en permancence, même si aucune information ne remonte de processing.

Un des nombreux traitement facile à intégrer dans puredata est un lissage temporel des valeurs. L'ajout des line avant l'envoi des messages les amortit.

Ceci est un exemple d'une procédure permettant d'expérimenter facilement et rapidement des comportements.

Resources