Ponts OSC entre logiciels
Entre Pure Data et Max
|
Principe
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.
Paramètres OSC nécessaires
1 - Adresse de la machine
localhost ou 127.0.0.1
2 - Numéro de Port OSC
Le numéro de port est arbitrairement donné par l’utilisateur et permet d’identifier le logiciel cible. Plusieurs ports différents sont utilisables avec ces logiciels.
Dans Max comme dans PD, les numéros de port sont mentionnés à la fois dans les objets OSC transmetteur et récepteur. 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 sendOSC de PD et udpreceive de Max. Le port choisi pour PD (4000, par exemple) est utilisé dans l’objet dumpOSC de PD et udpsend de Max. Ces objets sont détaillés plus loin dans cette page.
3 - Adressage des données
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.
Les données envoyées sont des nombres (entiers ou à virgule) ou des signaux comme trigger et bang. Cette adresse OSC est mentionnée en paramètre des objets transmetteurs et mais pas directement dans les objets récepteurs : elle apparaît à la suite des récepteurs en tant que paramètre de tri.
Transmission de données de Max MSP vers Pure-Data
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 Pure Data 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 de chaque flot | /capteur1, /capteur2, ... |
port Pure-Data | 4000 |
même machine | localhost |
Dans l’exemple donné ici, nous utilisons un module mini-HF dont nous voulons utiliser les données à la fois en Max et en PD. Les 8 sorties de capteurs sont envoyées vers PD, chacune associée à une adresse /capteurx. Les données entrent dans des messages, eux-mêmes connectés sur udpsend. Chaque message contient l’adresse et la valeur du capteur, représentée par $1. $1 est remplacé par toute valeur entrant dans le message (par exemple 1701).
2 - Vers PureData
Du côté de Pure-Data, deux objets sont nécessaires pour la réception des données. Il n’est pas besoin de se connecter comme on le verra plus loin pour l’envoi de données. L’objet dumpOSC permet de recevoir tout message OSC. Le message qui vient de Max est adressé au port UDP 4000. L’objet dumpOSC prend en paramètre ce numero de port. Le message est marqué par l’adresse /capteurx. Attention, le port doit être déclaré en paramètre pour que l’objet dumpOSC soit reconnu.
L’objet suivant, OSCroute, permet de trier les messages arrivant à l’aide de cette adresse. Sur les 8 premières sorties (sur laquelle sont branchés des nombres dans l’exemple) sortent les valeurs marquées par /capteurx. Sur la sortie de droite passent d’éventuels autres messages marqués différemment.
Transmission des données de Pure Data vers Max MSP
1 - A partir de PD
L’objet nécessaire pour envoyer des données en OSC est "sendOSC".
Les données sont envoyées avec une adresse spécifique vers un patch Max 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é sur un message |
adresse spécifique de chaque flot | /machin, /autre, ... |
port Max | 4800 |
même machine | localhost |
Dans l’exemple donné ici, nous envoyons des données de sliders, chacune associée à une adresse /mot. Pour amorcer la communication, il faut cliquer une fois sur le message "connect" associé aux paramètres d’adresse IP et de port. Disconnect ferme la communication.
Les données entrent dans des messages send, eux-mêmes connectés sur sendOSC. Chaque message contient l’adresse et la valeur du capteur, représentée par $1. $1 est remplacé par toute valeur entrant dans le message (par exemple 21).
2 - Vers Max
Du côté de Max, deux objets sont nécessaires pour la réception des données. Il n’est pas besoin de se connecter, l’objet udpreceive permet de recevoir tout message OSC. Le message provenant de PD étant adressé au port UDP 4800, udpreceive prend en paramètre ce numero de port. Les messages entrant sont marqués par les adresses /machin ou /autre.
L’objet suivant, route, permet de trier les messages arrivant à l’aide de cette adresse. Sur la sortie de droite passent d’éventuels autres messages marqués différemment.
Echange de plusieurs flots de données d’un logiciel à l’autre
Dans les exemples ci-dessus, chaque logiciel utilise un seul port (différent entre les deux logiciels). Plusieurs flots de données sont envoyés en parallèle sur ces ports, c’est-à-dire les données de plusieurs capteurs ou de plusieurs sliders. Le tri se fait par les différentes adresses.
Une autre possibilité est d’ouvrir des ports différents pour par exemple distinguer de grandes familles de données. Les objets de réception sont alors soit paramétrés à la volée par des messages "port", soit posés plusieurs fois, chacun avec son numéro de port spécifique.
Attention à ne pas copier-coller les objets d’envoi mais à les écrire directement avec des ports différents.