Blender:Exemple simple pour recevoir de l'OSC dans Blender
De Centre de Ressources Numériques - Labomedia
(Redirigé depuis 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 foncytionne 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
Fichier: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)