======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}}