OSC réalise l'encodage et le décodage de datas, le transfert des datas se fait en UDP ou en TCP. Encoder c'est structurer les datas et les convertir en bytes (octets): en python, cela peut se faire avec les modules pickle, cpickle, json. OSC définit des règles qui servent de “normes”.
“Au dessus de TCP ou UDP de nombreuses personnes ont développé des couches logicielles pour répondre à des besoins spécifiques à un domaine en définissant des protocoles ad-hoc. Et dans bien des cas il existe un module tiers Python qui permet d'utiliser ces protocoles. En voici quelques exemples.
Open Sound Control (OSC) est un protocole de communication utilisé dans le domaine du spectacle vivant, qui permet de transmettre des messages contenant des données typées, des ordres de contrôle pour des instruments, ou encore des échantillons numériques. Ce protocole est implémenté en respectant des contraintes de temps (rendu temps réel) et de facilité d'accès par des personnes dont le métier de base n'est pas nécessairement l'informatique. Les paquets OSC peuvent être transportés de différentes façons, liaison série, bus USB, et liaisons réseau TCP ou UDP.”
TCP est une couche au-dessus de UDP. En gros, UDP va vite mais ne vérifie pas si ce qui a été envoyé à été reçu. C'est bien pour du son, un jeu, ou la vitesse est importante. TCP attend une réponse après l'envoi pour savoir si le message a été bien reçu, sinon il renvoie. C'est sûr, mais ça peut prendre du temps : c'est bien pour du html, des fichiers ..
En pratique, sur un réseau local le TCP va aussi vite que l'UDP. TCP permet le mode connecté, qui permet d'identifier facilement les connectés: Twisted est parfait pour ça.
En 2020, ce projet fait partie du projet Kivy: laisser tomber tout le reste, utilisez ça !
liblo est une bibliothèque d'implémentation d'OSC, et python-liblo en est la version python. Une recherche très approfondie m'a donné quelques projets qui l'utilise:
Il n'y a pas de fonction “decode”: il faut ajouter des méthodes (handle) pour définir ce que l'on veut en fonction du message. Le projet Android meet Blender (OSC): www.surreal.asturnazari.es utilise pyliblo.
“Ce module est vaguement basé sur le bon vieux “SimpleOSC”, mis en œuvre par Daniel Holth & Clinton McChesney. Il a surtout été réécrit, et tout un ensemble de nouvelles classes ont été ajoutés: OSC-bundles, un simple OSC-client, un simple OSC-server, threading & forking OSC-servers et un plus complexe “threading & forking OSC-servers OSC-client” qui supporte les abonnements et OSC-address basée sur le filtrage d'adresse.”
encore valable avec python2.6 et c'est cette version qui est dans le pyKit de Julian oliver ! toujours en ligne sur ixi-software.net, il est aussi utilisé par kivy.
Streaming support (OSC over TCP):
v0.3.0 - 27 Dec. 2007 Started out to extend the 'SimpleOSC' implementation (v0.2.3) by Daniel Holth & Clinton McChesney.
v0.3.5 - 14 aug. 2008
Les versions suivante sont sur gitorious.org/pyosc
Un lien pour récupérer les: sources
La version python 3 est OSC3.py de pymultulame
Avec Pure Data 0.42.5, Blender 2.49 et Blender 2.57, python 2.6 et python 3.2
Communication entre Pure-data et Blender en OSC donne tous les détails de l'installation et les fichiers.
Si la latence est énorme, le problème vient du buffer UDP. Si l'envoi de data se fait à une fréquence supérieure à la lecture, le Buffer se remplit et les datas qui sont lues dans ce buffer ne sont pas les dernières envoyées. Des explications et des solutions.
Définition: Un “bundle” est un paquet. Ce paquet contient tous les messages.
Les logiciels, scripts peuvent envoyer soit:
Intêret du Bundle: Si il y a beaucoup de messages qui changent en même temps, tous les messages seront traîtés à chaque boucle du script. Sinon, il serait traîtés dans des boucles successives.
Particularité d'un script dans Blender: Le script est excécuté à chaque frame, donc maxi 60 fps(60Hz). Le script peut décoder le bundle à chaque frame et Blender n'aura pas de latence. Il faudra aussi s'assurer que la valeur lue est bien la dernère reçue en définissant la taille du buffer UDP.
TouOSC envoie un message toutes les 0.1 secondes en jouant très vite(soit 10Hz), le script avec un sleep de 0.001 tourne à 300 Hz.
La wiimote envoie environ 10 valeurs à 100Hz, il faudrait que Blender tourne à 1000Hz pour suivre, un Bundle est donc nécessaire, mais il faudra aussi sauter des valeurs, presque une sur deux. Voir Wiimote_:_Un_sabre_dans_Blender.