Skip to main content

OSC. Open Sound Control

Que es OSC?

Open Sound Control, abreviado osc, es un protocolo de comunicación entre dispositivos (ordenadores, sintetizadores ...) que esta optimizado para tecnologías conectadas en red (Hutchinson, 2022). ¿Y que es un protocolo? Un protocolo es un language, un código que tanto emisor como receptor comprenden y nos va a servir para enviar datos estructurados que una vez recibidos podamos descifrar.

En este curso vamos a utilizar este protocolo para comunicar Arduino y Pure data, esto nos va a permitir controlar Pure data desde Arduino y Viceversa. Para entender cómo funciona, primero vamos a utilizar un ejemplo muy sencillo que nos va a permitir controlar el Kick drum que hemos visto en la página anterior desde un móvil o tablet utilizando una app. El ordenador y el movil que queramos utilizar para este ejercicio deberán de estar conectados a la misma red, por ejemplo ambos deben de estar conectados a la wifi de casa. Para asegurarnos de esto podemos apagar los datos de nuestro movil y solamente conectarlo a traves de la wifi.

Etiquetas en la información, para clasificar los datos.

Comencemos por instalar y configurar la app en nuestro móvil o tablet:

Movil-Tablet

Android

Vamos a instalar aplicación "OSCcontroller":

https://play.google.com/store/apps/details?id=com.ffsmultimedia.osccontroller&hl=en&gl=US 


Una vez instalada la abrimos y configuramos la IP de la red a traves de la cual queremos enviar datos. ¿Que es la IP? Una IP es una dirección que utilizan dispositivos conectados a red para identificarse. En nuestro caso vamos a tomar la IP local o privada.

¿Y como sabemos cual es nuestra IP? Podremos consultarlo en nuestro ordenador, accediendo a la configuración de red:

image-1667486082255.gif

Esta IP es la que vamos a introducir en la app "OSCcontroller". Tambien vamos a configurar el puerto a traves del cual nos vamos a comunicar que sera el mimo que configuraremos en Pure data. El puerto es el canal especifico en el que vamos a enviar los datos. Para este ejemplo utilizaremos el 8000, pero podéis utilizar otro puerto que tengáis libre.

image-1667487345876.gif

Nuestro móvil o tablet ya está listo para enviar datos! Ahora vamos a configurar Pure data:

Pure data

Para recibir esta comunicación a traves de la red vamos a utilizar el objeto "netreceive" de la siguiente manera:

image-1667488183460.PNG

Vamos a configurar el puerto de escucha en Pure data enviando un mensaje con el texto "listen" y el numero del puerto. Pondremos dos argumentos en el objeto netreceive para asegurar su correcto funcionamiento: "-u" y  "-b".

Los datos recibidos por netreceive seran traducidos por el objeto oscparse a un language legible. Tras la traducción vamos a imprimir lo que estamos recibiendo.

 

Comencemos a enviar datos! Vamos a tocar los botones y sliders que vemos en la ventana de control del movil:

image-1667488585044.png

image-1667488509419.PNG

Vamos a fijarnos en la interfaz del movil. Tenemos 4 sliders en la parte izquierda, en la parte derecha superior tenemos tres interruptores y debajo de estos tres pulsadores. Cada uno de estos sliders, botones y pulsadores van a tener un codigo identificativo que nos permitirá saber desde que objeto de control recivimos la informacion. Vamos a fijarnos ahora en las lineas impresas en la ventanita de Pd en las primeras lineas podemos leer lo siguiente:

print: list oscControl slider4 0.16

Encontramos palabras y numeros separados por un espacio, vamos a ver que indican cada uno de estos grupos. Como bien sabeis el "print:" nos indica que esta linea que aparece en la ventanita son datos impresos desde un patch de pd utilizando el objeto print.

La palabra "list" nos indica que lo que se esta imprimiendo es una lista de elementos.

La palabra "oscControl" es una etiqueta que identifica el origen de estos datos, en nuestro caso es la app OSCcontrol. Podemos configurar el nombre de esta etiqueta en la app:

image-1667544902390.png

image-1667488585044.png

La siguiente palabra es una etiqueta que nos va a indicar desde que botón, interruptor o slider se envían esos datos: slider1, slider2, slider3, slider4, toggle1 toggle2 toggle3, button1, button2 o button3.

print: list oscControl slider4 0.16

Tras esta etiqueta que indica desde que botón, interruptor o slider se envían esos datos, encontraremos un valor numérico que corresponde con el estado del botón, interruptor o slider. Este envío se va a realizar cuando cambie el estado del botón, interruptor o slider, por ejemplo, cuando pulsemos un botón o movamos un slider. 

Como podéis ver en la ventanita recibimos información de varios actuadores. El slider4 en la posición 0.16, el button1 y el button2 han sido pulsados, el toggle3 ha encendido y apagado, el toggle2 ha sido encendido y permanece encendido y finalmente el button3 y el button1 han sido pulsados. 

Montar el sistema que acabamos de ver y hacer pruebas con los actuadores y el print.

Una vez recibimos los datos en Pd tendremos que procesarlos un poco para poder utilizarlos para modificar parámetros en nuestro patch. Como hemos visto estamos recibiendo una lista con etiquetas y un valor numérico, vamos a desgranar y clasificar esa lista. Para ello vamos a utilizar los objetos: 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Referencias:

Hutchinson, S. [Simon Hutchinson].  (2022, 7 febrero). Open Sound Control (OSC) in Pure Data Vanilla | Simon Hutchinson. [Video]. https://youtu.be/tJ2Kocl-2m4