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.

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

  • exemple_simple_pour_recevoir_de_l_osc_dans_blender.txt
  • Dernière modification: 2019/03/03 10:00
  • par serge