======Archives 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 === {{media_04:exemple_simple_osc.zip|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 {{media_12:recevoir_osc_socket.zip|Recevoir_OSC_socket.zip}}