======Exemple simple pour recevoir de l'OSC dans Blender====== Nous présentons ici des fichiers qui permettent de recevoir des messages OSC dans Blender 2.6. Les scripts sont en python 3. Cela fonctionne sous linux, windows et mac. Le script de reception imprime les datas toutes les secondes. Le seul fichier a bidouiller est config.py pour changer éventuellement les IP, port. ===== Les fichiers ===== {{media_12:simple_osc_in_blender.zip}} ===== Les scripts ===== === config.py === Ce script ne tourne qu'une seule fois au début du jeu. import GameLogic as gl gl.ip_in = "127.0.0.1" gl.port_in = 7110 === init.py === Ce script ne tourne qu'une seule fois au début du jeu. import GameLogic as gl # ---- Variable set as attribut of GameLogic ----# # This variable are used to save value between script or to save value during game ## Received OSC data gl.data = [] ## Used in get_osc.py # if Get OSC socket is connected or not gl.connected = False # to print every second in terminal some var to debug in get_osc.py gl.tempo = 0 === get_osc.py === Ce script tourne à chaque frame. Le sensor: "sens = cont.sensors["Get OSC"]" sert à ne lancer le script qu'une fois par frame. Sans cela, le script est lancé quand le sensor passe de 0 à 1, puis de 1 à 0 donc 2 fois par frame: ça ralentit et peut générer des bugs. import GameLogic as gl import socket import OSC from time import sleep # init global var ip = gl.ip_in port = gl.port_in buffer_size = 1024 data = gl.data # Only if no player connected # sens.positive is used only to run this script once: sens is positive only 0 to 1, not 1 to 0 cont = gl.getCurrentController() sens = cont.sensors["Get OSC"] if sens.positive: # Connect Blender if not gl.connected : try: gl.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) gl.sock.bind((ip, port)) gl.sock.setblocking(0) gl.sock.settimeout(0.005) gl.sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, buffer_size) print() print("Socket :") print(' Blender Receive OSC data \n on IP = {} \n Port = {} \n with Buffer = {} \n'.format(ip, port, buffer_size)) gl.connected = True except: print('No connected to IP={} Port={}'.format(ip, port), "\n") pass # If Blender connected if gl.connected : try: raw_data = gl.sock.recv(buffer_size) data = OSC.decodeOSC(raw_data) except socket.error: print("Socket Error: gl.connected is set to True") pass # Save gl.data = data # Increase and reset tempo gl.tempo += 1 if gl.tempo == 60: gl.tempo = 0 # print some print(data) === Le blend === {{media_10:osc_18.png|Osc 18.png Osc 18.png}} {{tag> bge logiciels_de_communication sb }}