Programmation

Les codes et programmes d’Interface-Z

Accueil > Outils > Ponts OSC entre logiciels > Ponts OSC depuis Pure Data vers Usine

Ponts OSC depuis Pure Data vers Usine

Mis à jour le jeudi 6 juillet 2017, par zandrine

Pour télécharger un patch, clic droit sur l’image et choisir "Enregistrer la cible sous..." (sinon le fichier .pd s’affiche en texte dans le navigateur).

Télécharger les patches de cette page : clic.

Principe

cf page dédiée.

Peu d’objets sont nécessaires pour communiquer en OSC : un récepteur reçoit les données de l’extérieur du logiciel et un transmetteur en envoie d’autres. Chacun de ces objets prend en compte des paramètres de numéro de port, d’identification de machine sur le réseau et de tri des données.

L’OSC doit être activé dans le menu Setup / OSC Setup d’Usine.


Paramètres OSC nécessaires

1 - Adresse de la machine

Dans cette page, nous utilisons deux logiciels installés sur une même machine. L’adresse réseau est donc "localhost" ou 127.0.0.1 . Quel que soit le logiciel, ce paramètre est utilisé dans l’envoi vers l’extérieur. Il est nécessaire pour préciser la destination du message. Le récepteur n’en a pas besoin, il écoute ce qui arrive de partout.

2 - Numéro de Port OSC

Le numéro de port est arbitrairement donné par l’utilisateur et permet d’identifier le logiciel cible. Usine utilise un seul port (Local Port 8000 par défaut). Plusieurs ports différents sont utilisables avec PD. Les ports des deux logiciels doivent être différents.

Dans PureData , les numéros de port sont mentionnés à la fois dans les objets OSC transmetteur et récepteur (ce qui est logique puisque plusieurs ports sont utilisables simultanément). Ils n’est pas nécessaire de les déclarer ailleurs dans un menu. L’adresse choisie pour PD est donnée en paramètre de l’objet dumpOSC. Le port choisi pour Usine (8000, par exemple) est déclaré dans l’objet sendOSC de PD. Ces objets sont détaillés plus loin dans cette page.

Dans Usine, le port se choisit dans le menu Setup / OSC Setup. Par défaut le Local Port est 8000. Il n’est pas nécessaire de déclarer ce port dans les modules de réception OSC receive, il est commun à tous. L’adresse de PD (666 par exemple) est donnée en paramètre du module OSC send.

OSC Setup d'Usine.
Image agrandie

3 - Adressage des données

Les données envoyées sont des nombres. Il est possible d’envoyer en même temps des flux de messages distincts, adressés à des récepteurs différents. Chaque flot de données est donc envoyé à une adresse OSC précise dans le logiciel cible. Cette adresse OSC est mentionnée (complète ou partielle) à la fois dans les objets envoyeurs et dans les objets récepteurs. Dans PD elle apparaît à la suite des récepteurs en tant que paramètre de tri.

Dans l’un ou l’autre de ces logiciels, l’adressage est libre de choix, il n’y a pas de mot précis à employer obligatoirement. L’adresse peut être un simple mot précédé d’un / (ex : /quelquechose). Dans le cas d’envoi de plusieurs flots de données distinct, le tri peut se faire soit par des mots différents (/truc et /machin), ou bien par des adresses plus complexes numérotées (ex : /chose/1 et /chose/2). Le choix se porte sur ce qui est le plus lisible.

Dans PD, le récepteur dumpOSC reçoit tout ce qui arrive sur son port 666. Les adresses spécifiques sont définies ensuite dans le tri (/truc et /romulan). L’émetteur sendOSC envoie ses données sur une adresse OSC identifiée par "/usine/" ici, avec un "/" final, et sur une autre adresse /abruptum/. Les détails sont donnés ci-dessous.

Dans Usine, les adresses correspondantes sont utilisées par le récepteur OSC receiver (/usine/ et /abruptum/) et par l’émetteur OSC Send (/truc et /romulan). Les détails sont donnés ci-dessous.

Workspace Usine.
Workspace pd_usine.wkp

Transmission de données de PureData vers Usine

1 - A partir de PD

L’objet nécessaire pour envoyer des données en OSC est "send OSC ".

Les données sont envoyées avec une adresse spécifique vers un patch Usine fonctionnant sur la même machine. Cette idée se traduit avec les paramètres OSC que nous avons présentés plus haut :

Traduction Paramètres
données flot de données connecté
adresse spécifique /usine/ et /abruptum/
port Usine 8000
même machine localhost

Patch Max 4.6
Patch PD pd_usine.pd

L’objet sendOSC doit recevoir successivement plusieurs informations, sous forme de messages, pour envoyer des données vers Usine.

Il faut d’abord se connecter avant de pouvoir envoyer des informations. Un message établit la connexion (connect) et indique à sendOSC qu’on s’adresse à un logiciel sur la même machine que le patch (localhost) et que le logiciel cible est Usine (identifié par l’adresse UDP 8000). Cliquer sur ce message une fois.

Enfin, les informations peuvent être envoyées par sendOSC et comprise par Usine. Un message send branché sur sendOSC précise à quelle adresse OSC le message doit être envoyé. Ce message contient l’adresse /quelquechose/ et la ou les valeurs à transmettre.

Dans l’exemple donné ici, nous utilisons des metro, un line et un random pour créer différents flux de données. Les valeurs fluctuent entre 0 et 100 d’un côté et entre 0 et 127 de l’autre.

* Cas d’un seul flux de données

Les valeurs envoyées sur l’adresse /abruptum/ emploient des messages OSC qui contiennent l’adresse et seulement cette valeur. Le message connecté sur sendOSC est créé en faisant suivre "/abruptum/" par $1, qui est remplacé par chaque nouvelle valeur venue du random.

* Cas de plusieurs flux simultanés

Les messages envoyés sur l’adresse /usine/ contiennent une liste de 4 valeurs. Pour fabriquer ces messages, les valeurs passent dans un pack (ou un pak selon la priorité d’activation choisie), qui crée une liste de 4 valeurs. L’objet prepend ajoute "send /usine/" devant la liste de données.

2 - Vers Usine

Workspace Usine.
Patch OSC_from_PD.pat

Du côté d’Usine, le module OSC receive permet de recevoir tout message OSC. En posant le module, choisir le nombre de sorties Data Out nécessaires en fonction du nombre de flux de données différents à recevoir, entre 1 et 64.

Dans l’exemple, le premier module est équipé de 4 data out, correspondant aux 4 valeurs envoyées vers /usine/. Le tri des différents flux se fait directement dans le module OSC receive vers les 4 sorties data, ici liées à des faders.

Le deuxième module n’a qu’une sortie, correspondant au message plus simple envoyé sur /abruptum/.

Si les metro du patch PD sont activés, lorsque les deux fichiers sont ouverts en même temps, et que l’OSC est activé dans Usine, vous devriez observer l’arrivée régulière de données dans ce dernier.

Transmission des données d’Usine vers PD

1 - Depuis Usine

Workspace Usine.
Patch OSC_to_PD.pat

Le module d’envoi est OSC send. Il peut être configuré pour envoyer de 1 à 64 flux différents. Il faut d’abord activer l’OSC dans OSC Setup avant de pouvoir envoyer des informations.

* Cas d’un seul flux de données

Les valeurs envoyées sur l’adresse /romulan emploient des messages OSC qui contiennent l’adresse et seulement cette valeur. Un module PointsCurve envoie automatiquement une séquence de valeurs.

* Cas de plusieurs flux simultanés

Les messages envoyés sur l’adresse /truc contiennent une liste de 2 valeurs, produites ici par des modules LFO et Step. L’option choisie en posant le module est 2.

Traduction Entrée de l’objet OSC Transmit Paramètres
même machine addr 127.0.0.1
PD port 666
adresse spécifique addr /truc et /romulan
données data 1, 2 flots de données connecté
envoi send activé ou ponctuel

Il faut aussi choisir le rythme d’envoi : l’entrée send du module OSC send doit être activée pour qu’un message parte. Deux possibilités :

  • Activer le bouton send, vert par défaut, le flux est permanent ;
  • Activer l’envoi ponctuellement en désactivant l’entrée send et en la cliquant seulement quand nécessaire.

Dans l’exemple, des modules créent des valeurs en permanence et l’entrée send est activée en continu. L’entrée broadcast est désactivée.

2 - Réception dans PD

Du côté de Pure Data, deux objets sont nécessaires pour la réception des données. L’objet dumpOSC permet de recevoir tout message OSC. Le message provenant d’Usine étant adressé au port UDP 666, dumpOSC prend en argument ce numero de port.

Les messages entrant sont marqués par les adresses /truc ou /romulan.
L’objet suivant, route, permet de trier les messages arrivant à l’aide de ces adresses. Sur la sortie de droite passent d’éventuels autres messages marqués différemment.

* Cas d’un seul flux de données

Les messages adressés à /romulan ne contiennent qu’une valeur, qui apparaît directement à la sortie du route.

* Cas de plusieurs flux simultanés

Les messages envoyés sur l’adresse /truc contiennent une liste de 2 valeurs, qu’il faut séparer grâce à l’objet unpack.

Echange d’un seul ou de plusieurs flots de données d’un logiciel à l’autre

Dans l’exemple précédent, nous avons expliqué comment envoyer plusieurs flux différents de données entre PD et Usine. En résumé, pour envoyer plusieurs valeurs simultanément on peut utiliser :

  • Un message unique contenant une liste de plusieurs valeurs, adressé à /quelquechose/ sur un port précis ;
  • Des messages différents envoyés à plusieurs adresses /autreschoses sur un port précis ;
  • Dans le sens Usine vers PD, des messages adressés à des ports différents.