Open Sound Control : OSC
Applications qui utilisent OSC
- Faceosc Interprétation du visage en osc. Utilisation de FaceOSC dans Blender.
- Touch Osc Connection portable (android/iphone) pour pouvoir créer des interfaces qui envoient de l'OSC.
- OSCinBlender des fichiers pour débuter un jeu dans Blender facilement.
Ressources Web
- http://en.wikipedia.org/wiki/Open_Sound_Control OSC sur en.wikipedia.org
- http://opensoundcontrol.org/ opensoundcontrol.org
- http://opensoundcontrol.org/publication/best-practices-open-sound-control les bonnes pratiques de l'OSC
- http://blenderartists.org/forum/showthread.php?198931-OpenSoundControl-in-Blender2.54-GE un post avec des fichiers de juin 2011
Pages du wiki Labomedia en rapport avec OSC
Les pages de la catégorie OSC
- Blender: OSC avec pyliblo
- Bytecode
- Communication entre Pure-data et Blender en OSC
- Définition d'un module
- Envoyer et recevoir de l'OSC en python
- Exemple simple pour recevoir de l'OSC dans Blender
- FaceOSC dans Blender
- Importer un module en respectant les PEP
- Importer un module python dans un script
- Jeu en réseau avec OSC: MultiPass For Freedom
- Latence de l' OSC dans Blender
- Modules et sous-modules
- Multicast
- Open Sound Control : OSC
- OSC.py Extrait de help
- OSCinBlender: une aide pratique
- Touch Osc
- Txosc
- Wiimote : Comment utiliser le Wii Motion Plus comme Gyroscope
- Wiimote : Script python avec cwiid pour envoyer et recevoir en OSC
- Wiimote : Un sabre dans Blender
- Wiimote dans Blender 2.5x avec pure data
- Wiimote dans Blender avec le module python 2.6 de cwiid
- WikikIRC
Ressources générales
- Le Principe des logiciels Temps réel
- Les ressources logicielles
- Les bases du Blender Game Engine pour commencer à prendre en main le Blender Game Engine
- Liens ressources tutoriaux Make Controller
- Liens ressources tutoriaux Arduino
Des programmes et compte rendu d'atelier
En pratique
- Kinect Tout sur la kinect
- Installation Kinect Linux Comment installer OpenNI Nite OSCeleton sur Linux
- Kinect dans le Blender Game Engine avec decodeOSC de OSC.py de SimpleOSC
Comprendre ce qu'est OSC
OSC réalise l'encapsulation et l'extraction de datas, le transfert des datas se fait en UDP ou en TCP. En gros, encapsuler c'est sérialiser: en python, cela peut se faire avec les modules pickle et cpickle. OSC définit des règles qui servent de "normes".
- opensoundcontrol.org Ce protocole simple mais puissant fournit tout le nécessaire pour contrôler en temps réel du son et autres supports de traitement tout en restant flexible et facile à mettre en œuvre.
- Wikipedia liste un grand nombre de logiciels qui utilise OSC en temps réel.
- Un pdf qui compare les performances de MIDI et OSC.
Surcouches légères Je cite: Python et l'agrégation d'outils Par Laurent Pointal
"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."
Quelle différences entre UDP et TCP
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 prend du temps : c'est bien pour du html, des fichiers ..
Comment implémenter OSC en python ?
txosc
Uniquement python2.7 en avril 2012, mais twisted est en cours de portage. Je cite un des auteurs :"It's the Best implementation of OSC for Python as far as I know.". Des ressources sur txosc
liblo
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:
- OpenNI
- RoseGarden
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. Vous pouvez retrouvez ici quelques explications. txosc est beaucoup mieux que pyliblo.
pyOSC une implémentation simple de Open Sound Control en Pure Python
- gitorious.org/pyosc propose le développement de SimpleOSC.
- trac.v2.nl/wiki/pyOSC donne des explications. Je cite:
"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."
Historique
SimpleOSC:
- Copyright (c) Daniel Holth & Clinton McChesney.
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
pyOSC:
- Copyright (c) 2008-2010, Artem Baguinski <artm@v2.nl> et al., Stock, V2_Lab, Rotterdam, Netherlands.
pour python2.6 gitorious.org/pyosc
Streaming support (OSC over TCP):
- Copyright (c) 2010 Uli Franke <uli.franke@weiss.ch>, Weiss Engineering, Uster, Switzerland.
Version
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
Download
Pack des fichiers du 22 juin 2011 : Fichier:OSC.py versions.zip
OSC.py Help
Importer votre module OSC en python
Les explications sur la page Importer un module python dans un script.
Des exemples simples pour envoyer et recevoir en python
Pour bien commencer ici Envoyer et recevoir de l'OSC en python.
Des exemples entre puredata et Blender
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.
Problème de latence très grande
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.
Bundle or not Bundle
Définition: Un "bundle" est un paquet. Ce paquet contient tous les messages.
Les logiciels, scripts peuvent envoyer soit:
- un message si une valeur à changé, avec uniquement ce message avec cette valeur.
- un bundle contenant tous les messages et toutes les valeurs même si elles n'ont pas changé. Ce message peut être envoyé parce qu'une valeur a changé, ou périodiquement même si rien ne change.
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.