Experimentos con Imagen

Como parte del prototipo final, realizamos algunos experimentos donde el instrumento también controla imagen generada en tiempo real en Pure Data Extended.


Generación de imagen en tiempo real

Primero se realizaron pruebas sencillas utilizando Gamuza[1], un entorno de programación para desarrollar aplicaciones gráficas en el lenguaje OpenFrameworks. Utilizamos valores de los sensores del móvil para generar gráficos en tiempo real.

Gamuza viene con la librería de OSC integrada en el programa, lo cual permitió de manera sencilla lograr este ejercicio, permitiéndonos recibir valores en tiempo real desde el móvil. Se vinculó el tamaño de una elipse al tilt del móvil. Es un ejemplo simple pero que demuestra el potencial de generación de imagen…ya que se pueden utilizar todos los sensores del móvil para dibujar formas 2D y 3D por igual.

 

Comenzamos a experimentar también con la librería GEM[2], que nos permitió diseñar un gráfico 3D que se renderiza en vivo (el cual utilizamos en la aplicación final de este proyecto) y consiste en 3 planos en un espacio tridimensional. Los colores de los planos son controlados por la nota musical reproducida y sus interpolaciones (se le asigna una nota a cada color), mientras que la rotación de los planos en cada uno de sus ejes se asocia a diferentes valores de los sensores. También utilizamos un objeto que genera una ola tridimensional, que se dibuja con puntos y asociamos los diferentes parámetros que controlan el gráfico a valores de sensores.

Primera prueba con GEM generando imagen en tiempo real.

Primera prueba con GEM generando imagen en tiempo real.


Parámetros mapeados y valores de sensores (generación de imagen en GEM)

Rotación X, Y, Z de planos: Utilizamos los valores tipo Motion con algunas alteraciones matemáticas y asociando valor equivalente para cada eje: Motion Pitch es X, Motion Roll es Y, Motion Yaw es Z.

Un plano utiliza los valores sin alterar, otro los multiplica por -1 y otro los multiplica por Pi (o en este caso: 3.14), lo que hace que cada plano tenga un eje rotacional diferente.

En este proyecto hemos utilizado extensivamente el objeto line de Pure Data en nuestros algoritmos. El objeto line es un objeto que logra una interpolación en un tiempo determinado de la siguiente manera: recibe un valor junto con una unidad de tiempo (por Ej. el número 2 y 500 milisegundos). El resultado que da el objeto es que llega al valor que está recibiendo en la unidad de tiempo especificada. (Por Ej. si el valor que se recibe de manera estable es 2 y el valor cambia a 3 con 500 milisegundos, el número se ira sumando hasta llegar a 3 en exactamente 500 milisegundos).

Para lograr un efecto de relatividad con el movimiento físico y del gráfico en pantalla, desarrollamos un objeto en Pure Data que llamamos accel_time. Básicamente lo que hace es alterar la velocidad de envío de una variable (un número que entra por un input del objeto) según valores del acelerómetro, estos valores modificados salen por un output. Funciona en esta secuencia: se suman los valores absolutos de los 3 ejes del acelerómetro (X,Y,Z), luego esto pasa a una serie de condicionales con diferentes umbrales, que determinan la unidad de tiempo del objeto line por el cuál pasará nuestra variable, que luego sale por el output. La velocidad en la que la variable pasa es inversamente proporcional a la velocidad del acelerómetro. Mientras mas movimiento se detecta en el móvil, los valores duran menos tiempo en enviarse y viceversa.

Colores y alphas: Para la modulación de los colores, nos basamos en un algoritmo que previamente diseñamos en un proyecto anterior (“The Sound of Your Face”[3]). Se recibe el valor sobre la nota musical que se está tocando en el momento y este pasa a una escala con colores, cada uno de estos asociados a una nota. El color corresponde a notas musicales y a los rangos de frecuencias entre ellas, ya que los colores van fluyendo entre notas.

El alpha de cada plano corresponde al valor de un algoritmo que recoge la velocidad del acelerómetro en sus distintos ejes y le realiza operaciones matemáticas. Después pasa por el nuestro objeto accel_time para determinar la velocidad de envío de este valor.

Pd wave: Utilizamos un objeto de la librería GEM llamado wave, que renderiza en tiempo real un gráfico de ola. Elegimos un modo que solo renderiza puntos de la ola. Asociamos diferentes valores a parámetros del gráfico: el Yaw del giroscopio controla la escala en Z de la ola. La rotación del gráfico va a asociado a los valores Motion, al igual que uno de los planos. Un parámetro llamado “force” que controla la magnitud de la reacción de la ola, lo asociamos a la rotación de uno de los planos en el eje X.

[1] GAmuza. Página web oficial. [consulta URL: 15/9/2015] [URL: http://gamuza.d3cod3.org/%5D

[2] GEM. Página web de librería para Pure Data. [consulta URL: 15/12/2015] [URL: https://puredata.info/downloads/gem]

[3] Vimeo. The Sound of Your Face/Tu Cara Me Suena. [consulta URL: 15/12/2015] [URL: https://vimeo.com/117191802%5D

Advertisements