OSC
L'OSC (Open Sound Control) est un protocole de transmission de données en temps réel entre plusieurs logiciels. La communication entre ces logiciels assure l'envoi et la réception des flux de données par une connexion réseau en utilisant le protocole UDP (User Datagram Protocol), qui est la couche de transport du protocole TCP/IP (Transmission Control Protocol, Internet Protocol).
L'OSC se caractérise par sa rapidité et sa flexibilité. Il ne provoque aucune latence perceptible lors de l'envoi ou de la réception des données.
Les logiciels mis en communication peuvent être installés sur la même machine ou sur des machines distinctes. Ainsi, D::Light peut être piloté par une autre application installée sur le même ordinateur ou bien être commandé à distance depuis depuis un iPhone ou un autre ordinateur par connection filaire, WIFI ou Internet.
En utilisant le protocole OSC, D::Light peut aussi lui-même commander d'autres machines par le biais d'une application comme Pure Data ou Max/Msp: un pas de séquence peut par exemple déclencher les pistes-son d'un player et des submasters peuvent être affectés à de multiples fonctions de déclenchement (play, pause, controle d'un fade son, etc.).
Communication OSC avec D::Light[modifier]
La transmission des données vers D::Light doit impérativement spécifier l'adresse de la machine (localhost ou adresse IP) et le numéro du port.
Par défaut, le port assigné à D::Light pour l'envoi des messages est 7000. La réception des données provenant de D::Light est assignée au port 7001.
Le statut et le port d'envoi OSC de D::Light doivent également être activés. Lorsqu'on enregistre une conduite, si la communication OSC de D::Light est activée, l'activation reste mémorisée dans la conduite.
La configuration et l'activation de l'OSC est accessible par le menu Display puis SETUP.
Bibliothèque OSC de D::Light[modifier]
Dans les tableaux suivants, le signe # correspond toujours à un numéro (de circuit, de pas de séquence, de submaster). Lorsqu'aucune valeur n'est mentionnée, c'est que seule la syntaxe de l'adresse suffit. Lorsque la syntaxe de réception est absente, c'est qu'elle est inexistante (inutile ou pas encore implémentée).
Syntaxe OSC de la version 4 [2018-02-01][modifier]
devices can also be controlled by OSC messaging process. for example, to control the RED parameter of a device :
Commande | Envoi vers D::Light | Réception depuis D::Light | ||
---|---|---|---|---|
Syntaxe | Valeur | Syntaxe | Valeur | |
Device (integer mode) | /device/#(device number)/COLOUR/RED | 0-65535 | /device/#(device number)/COLOUR/RED | 0-65535 |
Device (float mode) | /devicephase/#(device number)/COLOUR/RED | 0.0-1.0 | /device/#(device number)/COLOUR/RED | 0-65535 |
Commande | Envoi vers D::Light | Réception depuis D::Light | ||
---|---|---|---|---|
Syntaxe | Valeur | Syntaxe | Valeur | |
Go | /seq/go | 1 | /seq | /go # |
/X1 # | ||||
/X2 # | ||||
/X1ActiveCue # | ||||
/X2ActiveCue # | ||||
GoBack | /seq/goback | 1 | /seq | /goback # |
/X1 # | ||||
/X2 # | ||||
Pause | /seq/pause | 1 | /seq | /pause # |
X1 (mode scène) | /seq/X1 | # | /seq | /X1 # |
/X2 # | ||||
X2 (mode prépa) | /seq/X2 | # | /seq | /X1 # |
/X2 # | ||||
Update | /pad/update | 255-255 | ||
Fader X1 | /seq/fadeX1 | 0-255 | /fadeX1 | # 0-255 |
Fader X2 | /seq/fadeX2 | 0-255 | /fadeX2 | # 0-255 |
Goto Step # | /seq/goto | # | ||
Load & Goto CUE | /seq/X2LoadAndFireCue | # | ||
Goto ID # | /seq/ID_goto | # | ||
Load & Goto ID | /seq/X2LoadAndFireID | # | ||
Kill Submasters | /sub/kill | # | ||
Niveau du submaster # | /sub/#(subNumber)/phase | 0.0-1.0(float value) | /sub/#(subNumber)/level | 0-255 |
Niveau du submaster # | /sub/#(subNumber)/level | 0-255(value) | /sub/#(subNumber)/level | 0-255 |
Submaster Flash # | /sub/#(subNumber)/flash | 0-255(value) | /sub/#(subNumber)/level | 0-255 |
Submaster Time # | /sub/#(subNumber)/flash | 0-255(value) | /sub/#(subNumber)/level | 0-255 |
Niveau du circuit # | /circ/#(circNumber)/level | 0-255(value) | /circ/#(circNumber)/level | 0-255 |
Niveau Grandmaster | /grandmaster | 0-255 | /grandmaster | 0-255 |
Sélecteur Time/Flash/Inhib du sub # | /sub/#(subNumber)/mode | 1-2-3 | ||
Solo (sub # prioritaire) | /sub/#(subNumber)/type | 0-1 | ||
Pavé numérique | /pad/1...9 | 1 | pad/saisieText | # |
Point du pavé numérique | /pad/dot | 1 | ||
CHANNEL | /pad/channel | 1 | ||
LEVEL | /pad/level | 1 | ||
FULL | /pad/ff | 1 | ||
THRU | /pad/thru | 1 | ||
CLEAR | /pad/clear | 1 | ||
Freeze (gêle le DMX) (Toggle mode) | /pad/freeze | 1 | ||
Freeze (gêle le DMX) (Set mode) | /force/freeze | 0-1 | ||
Blackout (Toggle mode) | /pad/blackout | 1 | ||
Blackout (Set mode) | /force/blackout | 0-1 | ||
+ | /pad/plus | 1 | ||
- | /pad/moins | 1 | ||
+% | /pad/pluspourcent | 1 | ||
-% | /pad/moinspourcent | 1 | ||
ALL | /pad/all | 1 | ||
Validation (ENTER) | /pad/enter | 1 | ||
Sélection active à zéro | /pad/clearclear | |||
Clone | /pad/clone | |||
Inv | /pad/inv | |||
Sélecteur du mode Scène | /pad/scene | |||
Sélecteur du mode Scène | /pad/X1 | |||
Sélecteur du mode Prépa | /pad/prepa | |||
Sélecteur du mode Prépa | /pad/X2 | |||
Load a palette for selected Device(s) | /pad/palette | # | ||
Update a palette | /pad/paletteUpdate | (use commandLine to determine which palette to updated) | ||
Record a palette (open the record palette panel) | /pad/paletteRecord | (use commandLine to determine which palette to updated) | ||
RingBufffer Next | /pad/ringBufferNext | |||
RingBufffer Prev | /pad/ringBufferPrev | |||
Open PATCH window | /patch/launch | |||
Checking level (patch) | /patch/levelRequest | 0-255 | /patch/displayLevel | # |
Pad Digits (patch) | /patch/# | 1 | ||
Pad Dot (patch) | /patch/dot | 1 | ||
Inserted Digits (patch) | /patch/input | # | ||
Pad Clear (patch) | /patch/clear | 1 | ||
Pad Thru (patch) | /patch/thru | 1 | ||
Pad Next (patch) | /patch/next | 1 | ||
Pad Prev (patch) | /patch/prev | 1 | ||
Display Channel (patch) | /patch/displayChannel | # | ||
Display Patched Dimmer (patch) | /patch/displayDimmer | # | ||
Switch DIM-CHAN (patch) | /patch/switch | 0-1 | /patch/displayActiveSwitch | DIM-CH |
Active Channel (patch) | /patch/displayActiveChannel | # | ||
Active Dimmer (patch) | /patch/displayActiveDimmer | # | ||
Active Thru Dimmer (patch) | /patch/displayActiveThru | # | ||
Add Patch | /patch/plus | 1 | ||
Remove Patch | /patch/moins | 1 | ||
Test Channel (patch) | /patch/testChannel | 0-1 | /patch/testChannel | # |
Test Dimmer (patch) | /patch/testDimmer | 0-1 | /patch/testDimmer | # |
Communication OSC entre D::Light et Pure Data[modifier]
L'envoi des données vers D::Light[modifier]
Un seul objet est nécessaire :
- L'objet sendOSC. Il doit recevoir un message qui établit la connexion (connect), indique à sendOSC vers quelle machine envoyer les informations (localhost si c'est la même machine ou adresse IP s'il s'agit d'une machine distante) et lui précise que l'on s'adresse à D::Light en spécifiant son port (7000). Un second message (disconnect) permet la déconnexion manuelle. Facultativement, un objet loadbang permet d'activer automatiquement la connexion à l'ouverture du patch Pd. Mais l'état de la connexion ne peut pas être affiché. La syntaxe des messages d'envoi doit toujours commencer par le préfixe send (exemple : send /seq/go).
La réception des données provenant de D::Light[modifier]
Deux objets sont nécessaires :
- L'objet dumpOSC permet de recevoir les messages OSC. On lui attribue en paramètre le numéro de port de D::Light (7001).
- L'objet OSCroute, permet de trier les messages arrivant par l'objet dumpOSC. Les messages de réception des données provenant de D::Light constituent les paramètres de cet objet. Par chaque sortie on récupère les valeurs et/ou les symboles correspondants aux messages inscrits en paramètres selon leur ordre respectif. En l'absence de paramètre, la sortie de gauche liste les dernières informations reçues (par exemple : /4 255 si le submaster 4 est à full).
Les objets OSC de Martin Peach[modifier]
L'informaticien canadien Martin Peach a implémenté depuis 2008 de nouveaux objets qui sont intégrés à l'une des bibliothèques associées aux dernières versions de Pd-extended. Outre leur meilleure fiabilité par rapport aux objets sendOSC, dumpOSC, OSCroute, ils permettent de créer des messages plus complexes avec une syntaxe simplifiée et, surtout, l'envoi, la réception et le tri de paquets pouvant comporter des milliers d'informations simultanées (et cela, sans le moindre bug).
(Note: le patch ci-dessous est écrit pour la version 3.0.3 de D::Light. Voir le patch écrit pour les versions antérieures.)
- Pour l'envoi des données, l'objet sendOSC est remplacé par un couple d'objets : packOSC et udpsend. Les messages de connexion et déconnexion restent identiques. La sortie de udpsend peut recevoir un nombre qui affiche l'état de la connexion (0 ou 1). La syntaxe des messages d'envoi est simplifiée : il n'est plus nécessaire d'utiliser le préfixe send (il suffit, par exemple, d'écrire /seq/go). De plus, les envois simultanés peuvent être regroupés en un seul message, chaque syntaxe étant séparée par une virgule suivie d'un espace (exemple : /grandmaster 127, /seq/go, /sub/1/flash 188, /sub/4/flash 255, /circ/22 50, /circ/24 220).
- Pour la réception des données, les 2 objets dumpOSC et OSCroute sont remplacés par le trio udpreceive, unpackOSC, routeOSC. La sortie de droite de udpreceive donne l'adresse IP de D::Light qui se trouve dans l'OSCwriter.
- Cette bibliothèque d'objets est associée à Pd-extended mais elle doit être importée dans le patch. L'invocation se fait sous forme d'objets nommés import mrpeach/udpsend et import mrpeach/packOSC pour l'envoi, import mrpeach/udpreceive, import mrpeach/unpackOSC et import mrpeach/routeOSC pour la réception.
On peut accéder à la documentation dans Pd par help/browser:
- /usr/lib/pd/doc/5.reference/mrpeach/packOSC-help.pd
- /usr/lib/pd/doc/5.reference/mrpeach/routeOSC-help.pd
- /usr/lib/pd/doc/5.reference/mrpeach/udpreceive-help.pd
- /usr/lib/pd/doc/5.reference/mrpeach/udpsend-help.pd
Sous linux:
- /usr/lib/pd/extra/mrpeach/packOSC.pd_linux
- /usr/lib/pd/extra/mrpeach/routeOSC.pd_linux
- /usr/lib/pd/extra/mrpeach/udpreceive.pd_linux
- /usr/lib/pd/extra/mrpeach/udpsend.pd_linux
- /usr/lib/pd/extra/mrpeach/unpackOSC.pd_linux
Le tri des données OSC provenant de D::Light[modifier]
D::Light renvoie les données sous la forme de nombres (valeurs) ou de listes qui peuvent comporter des nombres mais aussi des symboles. Ces données doivent être triées par Pd afin d'être exploitées séparément. de plus, la version 3.0.3 utilise un bundle qui envoie des paquets de données multiples qui doivent être séparées.
- Lorsque le message de réception renvoie un seul nombre, la sortie correspondante de l'objet routeOSC reçoit un nombre. C'est le cas uniquement pour le message /grandmaster (niveau) dans la version 3.0.3. C'était le cas, dans les versions antérieures, pour /go (pas), /goback (pas) et /pause (pas).
- Les messages de réception /fadeX1 et /fadeX2 (anciennement: /XfadeX1 et /XfadeX2) renvoient une liste de 2 nombres (pas de séquence et niveau). Ils doivent être séparés par l'objet unpack avec 2 arguments f f (=float) qui spécifient qu'il s'agit de nombres.
- Les messages de réception /X1, /X2, /go, /goback et /pause doivent être extraits par un objet routeOSC de second niveau relié à la sortie du premier routeOSC qui correspond à /seq.
- Les messages de réception /sub et /circ renvoient une liste qui comporte un symbole (/#/level) et un nombre (niveau).
- L'opération la plus simple mais aussi la plus fastidieuse consiste à établir un routage à plusieurs niveaux. Pour les submasters, par exemple, le premier routeOSC extrait les données /sub, le second les données /#, le troisième les données /level, c'est-à-dire la valeur du niveau. Ce qui oblige à reproduire l'opération 250 fois pour les 250 submasters disponibles. De même pour les circuits.
- Une opération, plus économique, consiste à extraire directement les valeurs numériques en séparant les éléments symboles, non numériques(/ et /level), grâce à un séparateur. Symbole et nombre doivent préalablement être séparés par l'objet unpack avec 2 arguments qui sont s (=symbole) et f (=float). Le séparateur permet ensuite d'extraire le numéro de sub. On utilise pour cela l'objet symbol2list qui reçoit à gauche le symbole et à droite un message comportant le signe séparateur. Un nouvel objet unpack ayant f comme argument permet alors de récupérer le nombre qui était associé au slash. On peut procéder de la même manière pour les circuits. L'avantage est de taille: 2 nombres permettent la réception de toutes les données concernant les submasters (numéro de sub et niveau), de même pour les circuits. Il ne reste plus qu'à les dispatcher selon les besoins... (voir ci-dessous).
(Note: les patches ci-dessous sont écrits pour la version 3.0.3 de D::Light. Voir le patch écrit pour les versions antérieures.)
Routage "classique" des données :
Routage "économique" des données :
Le dispatch des données OSC /sub et /circ provenant de D::Light[modifier]
Dans le routage "économique" présenté ci-dessus, toutes les données envoyées par D::Light concernant les submasters et les circuits sont concaténées en deux objets nombre: l'un pour le numéro de sub (ou de circuit), l'autre pour la valeur du niveau. Pour qu'elles soient lisibles et exploitables il faut effectuer leur séparation et leur répartition.
- L'objet dispatch va permettre de faire apparaître, pour chaque submaster et pour chaque circuit, sa valeur respective.
- Cet objet dispatch nécessite l'importation d'une bibliothèque associée à Pd-extended: pour cela, on crée un objet import moonlib/dispatch.
- On crée ensuite 2 objets dispatch, l'un pour les subs, l'autre pour les circuits, dans lesquels on déclare en arguments la syntaxe générique utilisée pour chacun et les minima et maxima, c'est-à-dire les numéro du premier et du dernier submasters dont on veut récupérer les données (dans l'exemple ci-dessous, de 1 à 10). Même déclaration pour les circuits. Ce qui donne: dispatch $0-sub 1 10 et dispatch $0-circ 1 10. Si l'on veut récupérer les valeurs de 250 submasters et de 120 circuits, on déclarera: dispatch $0-sub 1 250 et dispatch $0-circ 1 120.
Le dispatch des données sub et circ (exemple pour 10 submasters et 10 circuits) :
- Reste à créer les objets qui vont réceptionner les données (dans l'exemple, ce sont des objets nombre mais on pourrait utiliser des sliders, des objets symbole ou faire apparaître les données comme label de canvas). Chacun devra comporter en label le nom et le numéro qui lui correspond afin de les identifier (Sb-1, Sb-2... Ch-1, Ch-2...).
Les objets de réception des données sub et circ (exemple pour 10 submasters et 10 circuits) :
Dernière opération: la création des messages d'envoi et de réception.
- Les nombres issus de routeOSC qui correspondent aux numéros et aux valeurs sont compactés par un objet pack f f puis envoyés (s = send) par un message qui reprend la syntaxe générique initialement déclarée à laquelle on ajoute le suffixe -rcv (receive). Ce qui donne: s $0-sub-rcv et s $0-circ-rcv.
- Chaque objet objet nombre appelé à réceptionner les données doit avoir la même déclaration en réception à laquelle s'ajoute son numéro propre: r $0-sub1-rcv pour le sub n°1 et r $0-sub2-rcv pour le sub n°2, etc. De même pour les circuits.
Les messages de réception des données sub et circ :
Et hop, le tour est joué: chaque objet nombre reçoit instantanément son dû!
Pour tester, on peut créer dans D::Light 10 groupes affectés aux submasters 1 à 10 et envoyer le message suivant:
On peut éventuellement sophistiquer l'ensemble en établissant au préalable une conversion des niveaux 0-255 en 0-100, puis transformer ces valeurs numériques en symboles, grâce à l'objet ftos (float to symbol) afin d'ajouter, par un sélecteur, un message qui remplace la valeur 100 en FF.
Communication OSC entre D::Light et le terminal[modifier]
Il est possible d'envoyer des messages OSC en ligne de commande via le terminal, avec oscsend qui fonctionne grace à la librairie Liblo
Ces outils sont disponibles dans la plupart des repos officiels. Vous pouvez les installer en utilisant apt, pacman, brew, etc.
Une fois l'outil installé, la commande suivante vous permet d'envoyer un GO :
oscsend localhost 7000 /seq/go f 1.0
la commande suivante vous permet d'envoyer le STEP ID 12
oscsend localhost 7000 seq/X2LoadAndFireID f 12
Avec cette commande, vous pouvez synchroniser simplement Linux Show Player et D::Light, en une seule cue list dans LiSP, en y créant une Cue Command, qui exécutera la ligne de commande.
Voir aussi[modifier]
Télécommande OSC[modifier]
Page concernant l'utilisation d'un smartphone ou d'une tablette comme télécommande pour D::Light en OSC : Télécommande OSC
Liens externes[modifier]
Retourner à la page Les Menus
Retourner à la page Accueil