Entre Max et Usine

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.
max-usine-00

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 Max. Les ports des deux logiciels doivent être différents.

Dans Max, 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 Max est donnée en paramètre de l’objet udpreceive. Le port choisi pour Usine (8000, par exemple) est déclaré dans l’objet udpsend de Max. 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 Max (3244 par exemple) est donnée en paramètre du module OSC send.

usine-osc-setup-tit 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 Max 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 Max, le récepteur udpreceive reçoit tout ce qui arrive sur son port. Les adresses spécifiques sont définies ensuite dans le tri (/machin et /vulcan). L’émetteur udpsend envoie ses données sur une adresse OSC identifiée par "/usine/" ici, avec un "/" final, et sur une autre adresse /barbaros/. Les détails sont donnés ci-dessous.

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

max-usine-wkp

Transmission de données de Max vers Usine

1 - A partir de Max

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

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 /barbaros/
port Usine 8000
même machine localhost

max-usine-pat

Dans l’exemple donné ici, nous utilisons deux 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 /barbaros/ emploient des messages OSC qui contiennent l’adresse et seulement cette valeur. Le message connecté sur udpsend est créé en faisant suivre "/barbaros/" 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 l’en-tête "/usine/" devant la liste de données.

2 - Vers Usine

OSC-from-Max-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 /barbaros/.

Si les metro du patch Max 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 Max

1 - Depuis Usine

OSC-to-Max-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 /vulcan 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 /machin 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
Max port 3244
adresse spécifique addr /machin et /vulcan
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 Max

Du côté de Max, deux objets sont nécessaires pour la réception des données. L’objet udpreceive permet de recevoir tout message OSC. Le message provenant d’Usine étant adressé au port UDP 3244, udpreceive prend en paramètre ce numero de port.

Les messages entrant sont marqués par les adresses /machin ou /vulcan.

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 à /vulcan 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 /machin 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 Max 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 Max, des messages adressés à des ports différents.