« OSC » : différence entre les versions

De wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 190 : Ligne 190 :




=== '''Syntaxe OSC de la version 4.0.0._b22''' ===
=== Syntaxe OSC de la version 4.0.0._b22 ===


{| class="wikitable"
{| class="wikitable"
Ligne 352 : Ligne 352 :
| Test Dimmer (patch)||/patch/testDimmer  ||0-1  ||/patch/testDimmer ||#  
| Test Dimmer (patch)||/patch/testDimmer  ||0-1  ||/patch/testDimmer ||#  
|}
|}


=Communication OSC entre D::Light et Pure Data=
=Communication OSC entre D::Light et Pure Data=

Version du 6 juillet 2015 à 01:59

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

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

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 3.0.2

Commande Envoi vers D::Light Réception depuis D::Light
Syntaxe Valeur Syntaxe Valeur
Niveau du circuit # /circ/# 0-255 /circ /# 0-255
Niveau Grandmaster /grandmaster 0-255 /grandmaster 0-255
Pas de séquence /seq # /seq #
Go /seq/go /go #
GoBack /seq/goback /goback #
Pause /seq/pause /pause #
Fader X1 /seq/xfade_x1 0-255 /XfadeX1 # 255-0
Fader X2 /seq/xfade_x2 0-255 /XfadeX2 # 0-255
Niveau du submaster # /sub/#/level 0-255 /sub /# 0-255
Submaster # Time ou Flash /sub/#/flash 0-255 /sub /# 0-255
Sélecteur Time/Flash du sub # /sub/#/mode 0-1
Solo (sub # prioritaire) /sub/#/type 0-1
Pavé numérique /pad/1...9 1
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) /pad/freeze 0-1
Blackout /pad/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
Ouverture de la fenêtre de check /checkcirc/launch
Circuit à checker /checkcirc/circ 0-512
Niveau de test des circuits /checkcirc/level 0-255
Teste le circuit suivant /checkcirc/next
Teste le circuit précédent /checkcirc/prev


Notes à propos de la version 3.0.2

  • Circuits et Submasters : Dans le tableau ci-dessus, les messages renvoyés par D::Light concernant les circuits et les submasters correspondent à la syntaxe de la version 3.0.2. Dans les versions antérieures, la syntaxe est la suivante:
    • /circ/# renvoie la valeur (0-255) du circuit #.
    • /sub/# renvoie la valeur (0-255) du submaster #.
  • Fader X1 : La valeur du Fader X1 renvoyée par D::Light est toujours inversée. Exemple: si la valeur envoyée est 255, la valeur retournée est 0.
  • Temporisation des Submasters :
    • Lorsque le message d'envoi est /sub/#/flash, si le submaster est temporisé (mode TIME), son temps de montée est celui de la temporisation, sinon (mode FLASH) sa montée est instantanée.
    • Pour contrôler la temporisation indépendamment du temps programmé dans la mémoire du submaster, il faut utiliser la syntaxe /sub/#/level.
  • Niveau des Submasters :
    • En mode TIME, lorsque le message d'envoi est /sub/#/flash, le niveau effectif du submaster et la valeur retournée par D::Light sont indifférents à la valeur envoyée. Ils ne dépendent que du niveau mémorisé dans le submaster (TARGET). Pour activer le submaster, il suffit que la valeur soit supérieure à 0 (entre 1 et 255).
    • En mode FLASH, lorsque le message d'envoi est /sub/#/flash, le niveau effectif du submaster et la valeur retournée par D::Light dépendent du niveau mémorisé dans le submaster (TARGET) ET de la valeur envoyée. Exemple: si le TARGET est 128 et la valeur envoyée est 128, le niveau effectif sera 25% et la valeur renvoyée 64.
    • En mode TIME ou FLASH, lorsque le message d'envoi est /sub/#/level, le niveau effectif du submaster et la valeur retournée par D::Light correspondent uniquement à la valeur envoyée, quelle que soit la valeur TARGET mémorisée dans le submaster.


Modifications de syntaxe OSC dans la version 3.0.3

Le tableau ci-dessous récapitule uniquement les changements de syntaxe qui apparaissent dans la version 3.0.3 de D::Light (21 décembre 2010).

Commande Envoi vers D::Light Réception depuis D::Light
Syntaxe Valeur Syntaxe Valeur
Go /seq/go /seq /go #
/X1 #
/X2 #
GoBack /seq/goback /seq /goback #
/X1 #
/X2 #
Pause /seq/pause /seq /pause #
X1 (mode scène) /seq/X1 # /seq /X1 #
/X2 #
X2 (mode prépa) /seq/X2 # /seq /X1 #
/X2 #
Fader X1 /seq/fadeX1 0-255 /fadeX1 # 0-255
Fader X2 /seq/fadeX2 0-255 /fadeX2 # 0-255
Niveau du submaster # /sub/#/level 0-255 /sub /#/level 0-255
Submaster # Flash /sub/#/flash 0-255 /sub /#/level 0-255
Submaster # Time /sub/#/flash 1-255 /sub /#/level 0-255


Notes à propos de la version 3.0.3

L'essentiel des modifications concerne les informations renvoyées par D::Light. Les messages de retour sont moins nombreux et leur syntaxe est simplifiée alors que les informations renvoyées sont plus complètes.

Le revers de cette simplification, c'est une complexité plus grande dans le traitement des informations retournées par D::Light puisque une même commande déclenche en retour le renvoi de plusieurs informations différentes, regroupées en listes dont les valeurs ne sont pas toutes numériques.

Ces modifications permettent tout particulièrement un meilleur suivi des pas de séquences pour toutes les commandes de séquences qui retournent systématiquement les états respectifs en X1 et X2. Désormais, une syntaxe unique (/seq) permet de connaître le type de commande utilisée (go, goback, pause, mode scène, mode prépa), le pas de séquence commandé et les pas de séquence en X1 et en X2 en fin d'action.


Syntaxe OSC de la version 4.0.0._b22

Commande Envoi vers D::Light Réception depuis D::Light
Syntaxe Valeur Syntaxe Valeur
Go /seq/go /seq /go #
/X1 #
/X2 #
/X1ActiveCue #
/X2ActiveCue #
GoBack /seq/goback /seq /goback #
/X1 #
/X2 #
Pause /seq/pause /seq /pause #
X1 (mode scène) /seq/X1 # /seq /X1 #
/X2 #
X2 (mode prépa) /seq/X2 # /seq /X1 #
/X2 #
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 #
Kill Submasters /sub/kill #
Niveau du submaster # /sub/#/level 0-255 /sub /#/level 0-255
Submaster # Flash /sub/#/flash 0-255 /sub /#/level 0-255
Submaster # Time /sub/#/flash 1-255 /sub /#/level 0-255
Niveau du circuit # /circ/# 0-255 /circ /# 0-255
Niveau Grandmaster /grandmaster 0-255 /grandmaster 0-255
Sélecteur Time/Flash/Inhib du sub # /sub/#/mode 1-2-3
Solo (sub # prioritaire) /sub/#/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
Ouverture de la fenêtre de check /checkcirc/launch
Circuit à checker /checkcirc/circ 0-512
Niveau de test des circuits /checkcirc/level 0-255
Teste le circuit suivant /checkcirc/next
Teste le circuit précédent /checkcirc/prev
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

L'envoi des données vers D::Light

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

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

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

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

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.


Voir aussi

Documents complémentaires

Liens externes

Tutoriels