¿Qué es la comunicación OSC?

O Pen S ound C ontrol , es un protocolo de comunicaciones.
Se utiliza principalmente para intercambiar señales con aplicaciones y dispositivos externos .

Utiliza TCP / IP, UDP o UDT como infraestructura de comunicación.

Un protocolo es una regla de comunicacion, y tiene un formato que puede interpretarse.

TCP / IP tiene la función de que el remitente confirma al receptor si la transmisión de la señal se ha completado, si hay una pérdida, la reenvía.

Como UDP no confirma la recepción, la información puede perderse, se usa para la comunicación de aplicaciones en tiempo real debido a su alta eficiencia de comunicación.

UDT mide el ancho de banda que puede usar el receptor, e intercala el proceso de transmisión de la cantidad calculada de paquetes del transmisor, pero la comunicación en sí usa UDP.

La comunicación OSC con TouchDesigner es compatible a través de UDP o UDT .

 

Formato de comunicación OSC

 

Comunicación OSC,
/ rgba 255 255 10 0.4

(patrón de dirección) (argumento) (argumento) …
está constituido por un mensaje.

Los patrones de dirección pueden tener una estructura jerárquica separada por barras, y se pueden usar int32, float32, valores de cadena, etc. como argumentos.
Sin embargo, TouchDesigner no puede manejar bien la estructura jerárquica, por lo que es mejor usar una sola jerarquía.

TouchDesigner puede enviar y recibir señales OSC a través de OSC In / Out CHOP y OSC In / Out DAT

 

Comunicación OSC con Touch Designer-Chop

 

En la transmisión OSC con CHOP, solo se puede tomar un argumento para un patrón de dirección debido a la estructura. Puedes recibir.
Si desea enviar múltiples argumentos, use la comunicación OSC con DAT.

Utilice el software externo «Processing» para ver cómo se formatean los datos que se envían y reciben.

OSC In CHOP

Recibe señales OSC de la red y las convierte en valores de canal CHOP.
Para el parámetro, especifique el número de puerto que se abrirá cuando reciba una señal.

Primero, envíe la señal OSC desde el software externo.

2017-02-14_161935.png

OscMessage myMessage = new OscMessage("/processing");
myMessage.add(10.1209);
oscP5.send(myMessage,myRemoteLocation);

 

/processing 10.1209

 

Mas información sobre OscP5 en processing:

http://www.sojamo.de/libraries/oscP5/

 


Cuando OSC lo recibe en CHOP, se ve así:

Como puede ver en este ejemplo, la señal llega, pero no maneja bien la jerarquía del patrón de dirección, y la segunda barra y las barras posteriores simplemente se reconocen como caracteres.

Si se reciben múltiples argumentos para un patrón de dirección, se agregará un sufijo numérico al patrón de dirección.

OSC Out CHOP

Convierte el valor del canal del CHOP conectado en una señal OSC y lo envía.
En este momento, el nombre del canal CHOP se convierte en el patrón de dirección y el valor del canal se convierte en el argumento.

Especifique la dirección IP de destino y el número de puerto.
Esta vez configuré la dirección de red (IP) en localhost para enviar una señal a mi PC, pero puede verificar la dirección IP general con lo siguiente.

 

Símbolo del sistema-> Introduzca "ipconfig" -> Dirección IPv4 ???. ???. ???. ???

 

(Imagen izquierda: pantalla de transmisión TouchDesigner OSC, imagen derecha: pantalla de recepción de processing  OSC)

Patrón de dirección: / h, / s, / v 
Tipo: f, f, f 
Argumentos: 180, 100, 255

 

Comunicación OSC con Touch Designer-DAT

OSC en DAT

Al igual que con CHOP, especifique el puerto de recepción en el parámetro.
A diferencia de CHOP, tiene un mecanismo que mantiene un historial de valores comunicados.

2017-02-14_174103.png

OSC Out DAT

Hay una función miembro sendOSC () en la clase OSC Out DAT, y parece que es posible enviar una señal al pasar el valor String del patrón de dirección y la lista de argumentos OSC a este argumento .

Si no escribe una barra para el patrón de dirección, no funcionara.
La llamada a la función sendOSC () se realizará en la función frameStart () que se ejecuta en cada cuadro en Execute DAT.

def frameStart(frame):
    arg_list = [10, 100, 255, 0.7]           // make an OSC arguments list
    op('oscout1').sendOSC("/rgba", arg_list) // call sendOSC() member method of oscOutDat_class
    return

 

    

2017-02-14_174827.png

El resultado no se mostró en OSC Out DAT, pero se recibió correctamente en el lado de processing.

OSC entre Touch Designer y Python

Puede ejecutar scripts de Python dentro de TouchDesigner internamente, pero hay ocasiones en las que necesita interactuar con Python (incluidas otras máquinas) que no están dentro de TouchDesigner debido a varias razones.
Con el siguiente código podremos lograr esta comunicación externa.

Python

'''
setup instruction 
for Install pythonosc
pip install python-osc

'''

from pythonosc import dispatcher
from pythonosc import osc_server
from pythonosc import udp_client

def messege_handler(unused_addr, *p):
    try:
        print(p)
        client.send_message("/message_echo", p)
    except ValueError: pass

dispatcher = dispatcher.Dispatcher()
dispatcher.map("/message", messege_handler)
server = osc_server.ThreadingOSCUDPServer(("127.0.0.1", 5005), dispatcher)
print("Serving on {}".format(server.server_address))

client = udp_client.SimpleUDPClient("127.0.0.1", 5006)

server.serve_forever()

Aquí, los datos recibidos por el puerto 5005 se envían de vuelta al puerto 5006 tal como están.

TouchDesinger 

OSC OutDATOSC InDAT . Tenga en cuenta que el número de puerto es diferente.

Como prueba para enviar OSC, escriba lo siguiente en textDAT y ejecútelo.

n = op('oscout1')
n.sendOSC('/message',['something', 9999])

Test

El tiempo transcurrido de TD → Python → TD fue de 6 ms. Si especifica la IP, puede intercambiar con otras máquinas.

 

Codigo: https://gist.github.com/shks/711411b5ea6151c099d7ca29ff901a29

 

Fuentes:

Share this: