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.
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'
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.
fig:Exemple simple OSC.zip Lancer en terminal
python exemple_receive.py
puis lancer dans un autre terminal
exemple_send.py
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.
Comme le premier exemple ci- dessus avec Recevoir_OSC_socket.zip