Ceci est une ancienne révision du document !
Table des matières
Envoyer et recevoir de l'OSC en python
Import du module OSC
import OSC
va lire le fichier OSC.py et toutes les fonctions qu'il contient.
Il suffit de coller le fichier dans le dossier qui contient votre script.
Exemple simple
Envoi d'un message
Ce script envoie 10 messages avec la valeur de i toutes les secondes
import OSC import time # Init OSC client = OSC.OSCClient() msg = OSC.OSCMessage() msg.setAddress("/test") for i in range(10): time.sleep(1) msg.append(i) try: client.sendto(msg, ('127.0.0.1', 9001)) msg.clearData() except: print 'Connection refused'
Reception d'un message avec un serveur
Cette exemple convient à un script qui boucle, dans Blender, le script qui reçoit sera relancé à chaque frame. Le module socket fait cela facilement, par exemple : dans les fichiers de Communication_entre_Pure-data_et_Blender_en_OSC.
import OSC import threading #------OSC Server-------------------------------------# receive_address = '127.0.0.1', 9001 # OSC Server. there are three different types of server. s = OSC.ThreadingOSCServer(receive_address) # this registers a 'default' handler (for unmatched messages) s.addDefaultHandlers() # define a message-handler function for the server to call. def printing_handler(addr, tags, stuff, source): if addr='/test': print "Test", stuff s.addMsgHandler("/test", printing_handler) def main(): # Start OSCServer print "Starting OSCServer" st = threading.Thread(target=s.serve_forever) st.start() main()
Pas de sortie propre de ce script, c'est un exemple, fermer le terminal pour l’arrêter.
Tester les deux ensemble
fig:Exemple simple OSC.zip Lancer en terminal
python exemple_receive.py
puis lancer dans un autre terminal
exemple_send.py
Un autre exemple pour recevoir avec le module socket
import socket from OSC import decodeOSC ip = '127.0.0.1' port = 9001 buffer_size = 1024 do_loop = True # Connect my_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: my_socket.bind((ip, port)) my_socket.setblocking(0) my_socket.settimeout(0.002) my_socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, buffer_size) print 'Plug : IP = ', ip, 'Port = ', port, 'Buffer Size =', buffer_size except: print 'No connected' # If connected while do_loop: try: raw_data = my_socket.recv(buffer_size) data = decodeOSC(raw_data) print(data) except socket.error: pass
va imprimer:
Plug : IP = 127.0.0.1 Port = 9001 Buffer Size = 1024 ['/test', ',i', 0] ['/test', ',i', 1] ['/test', ',i', 2] ['/test', ',i', 3]
Je trouve ça beaucoup plus clair. Il n'y a pas de sortie propre de la boucle, ce n'est pas le but de l'exercice.
Tester les deux ensemble
Comme le premier exemple ci- dessus avec Recevoir_OSC_socket.zip