Mostrando las entradas con la etiqueta Programas - Processing/JAVA. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programas - Processing/JAVA. Mostrar todas las entradas

lunes, 20 de junio de 2011

SoundPaint

SoundPaint 14
http://openprocessing.org/visuals/?visualID=30729
Una versión básica.

SoundPaint 29
http://openprocessing.org/visuals/?visualID=31621
La última versión, sin capacidades de MIDI o carga de imagenes jpg, por ser un Applet

Intro:

Este proyecto continúa el proceso de este programa muy simple que empecé en el 2008.
Se puede usar en web, no es necesario instalarlo.

Color to Sound:
http://openprocessing.org/visuals/?visualID=3733

Ahora usando la misma idea de escuchar los colores bajo el puntero del mouse agregué un "Modo Paint".
Ahora se puede alternar entre pintar y escuchar lo pintado, corregir la imagen, escucharla nuevamente.
El efecto que he notado al usar el programa es que, ademas de coordinarse un poco los sentidos de vista y oido, se funden el espacio y el tiempo.
Al pintar una secuencia rítmica de lineas y luego escucharlas se tiene una noción especial referente al tiempo. Similar a cuando se lee una partitura (Cosa que yo nunca logré) pero usando otra intuición (la de relaciones entre colores) en vez de la relación de altura en el pentagrama de un circulo negro o blanco tradicional.

Sinestesia:
La sinestesia es un fenomeno en el que la confusión entre colores y notas musicales sucede naturalmente en personas con cierta conección entre sus 5 sentidos mas evidente que en la gente "normal".

Investigué este fenomeno.
El articulo en español es muy completo y diferente al que está en ingles.

En la Wiki encontré estos dos criterios que relacionan colores y notas:





Estamos de acuerdo en que el Do es rojo...
El resto varía. En todo caso el rango de frecuencias asociadas al circulo cromatico es configurable mediante barra de scroll.


Proceso:
Encontré varios códigos de Paint en Processing.
Elegí el que me pareció que tenia el código mas simple y a la vez implementa botones para seleccionar colores y dos funciones extra: Guardar la imagen como archivo y salir del programa.



Simple Paint de Ferhat Sen!

Aca se puede probar.

Uní mi "Color to Sound" al Simple Paint que encontré en Openprocessing.
De manera que una variable "Modo" elige entre los dos formas de funcionamiento al principio de cada "Draw" (el código bajo "Draw" se ejecuta 60 veces por segundo).
Cambié el modo de color: de "RGB" por defecto, a "HSB", de esta manera tengo mejor control de los parametros sin usar funciones externas.
Reubiqué los botones y paleta de colores.
Agrandé la paleta de 4 a 14 colores, para tener una octava y sus semitonos. Etiqueté cada color con la nota correspondiente.
Asocié la amplitud del sonido al valor de saturación del color. Mas que nada para mantener silencio al escanear la hoja blanca y solo se escuche sonido al pasar sobre los trazos de color.



Así se ve la interfaz de la versión 7.
Convertí el boton de "salir" a la funcion de "BLANK" que deja la hoja en blanco de nuevo.
Convertí el boton de "guardar imagen" a la función guardar imagen y comenzar a leer el color bajo el mouse al hacer click y hacer sonar la nota acorde.
Cualquier tecla presionada nos devuelve al modo "Paint" nuevamente.

Sigo sin llegar a una relación entre colores y notas que resulte natural. Lo que hare en futuras versiones sera hacer eso configurable.
Si bien hay pares de colores que funcionan mejor juntos que otros, igual que hay pares de notas mas armónicos que otros. El problema esta en que los colores se organizan naturalmente en el circulo cromático, mientras que las notas funcionan mas bien como una escalera caracol: si bien se cumple un circulo de notas siempre se está subiendo y bajando de tono. Al organizar las 7 notas en un circulo siempre queda un salto entre la última y la primera nota de la escala.




Versión 8.
Agregué una barra para seleccionar el rango de Hz que representa el circulo de colores.
Agregué boton "Eraser", goma de borrar.
Agregué slider para seleccionar rango de frecuencias asociadas al circulo cromático.
Es de la librería controlP5, que tiene sliders, perillas, botones, etc...

El rango de sonido por defecto pasó a ser una octava en vez de dos y la paleta de colores es esa octava y sus semitonos. Antes eran dos octavas, y la paleta eran solo las notas de esas dos octavas.
Me pareció que funcionaba mejor asi, intuitivamente. Si el circulo cromatico da una vuelta, esta bien que el circulo cromatico/sonoro tambien dé una sola vuelta/octava.
Habia configurado dos octavas porque hay melodías que requieren mas de una octava, pero es mas natural así.

Los intervalos entre pixeles del slider son de demasiados Hz si se quiere poder seleccionar de entre 0 Hz a 10 KHz.
Estaría bueno aplicar alguna función que dé mas sensibilidad cuanto mas cerca del cero.

Estoy tratando de lograr escuchar los colores sin necesidad de crear el archivo "myPicture.png", en vez, leyendo los pixeles del array de la pantalla directamente.
Para poder ejecutarlo como applet en una pagina web.

Hay una diferencia entre la frecuencia en Hz de los colores-notas de maximo 2 Hz con la nota real. Pasa que el "hue" es un valor entero (de O a 255) y al convertira Hz se pierden las fracciones.
Trataré de solucionar este tema tambien, el rango de la variable hue es modificable en colorMode().




Versión 9.
Modifiqué boton "Listen"
Creé mensaje "Strike key to paint again" en modo audio.



Versión 12
Me pasé probando sliders encontrando uno que me diera exactitud de al menos 1/10.000, para poder seleccionar una frecuencia de Hz exacta.
Me decidí por ese par... si bien son un poco lentos, son exactos. Uno no va a modificar muy seguido esto y quiere exactitud.
Los puse al lado de los colores para sugerir correlación entre el "alto" del color y de la nota.
He visto varias formas de traducir sonido a imagen que usan el criterio arriba-agudo, abajo-grave.
Asi que di vuelta el orden de los colores y puse el boton "Eraser" a un lado.




Versión 15
Me decidí por un selector de "tics" que configure el rango por octavas, el otro modo de configurar rango de frecuencias no era práctico.
A partir de la version 13 pude leer el color de los pixels de la pantalla directamente, sin necesidad de guardar un archivo de imagen en el disco duro y leer los pixeles desde ahi.
El programa hacia eso porque el codigo que "robe" sin entender lo hacia de esa manera.
Finalmente entendi como funciona todo :)

Y de esa manera pude subir un applet que funcione para ver online:
http://openprocessing.org/visuals/?visualID=30729
Es el mismo que está al principio de la entrada.

Para la versión 15 se puede cargar cualquier imagen mediante el tipico dialogo de seleccion de archivo que usan todos los programas.
Es divertido escuchar fotos!



Versión 21.

Agregué slide para el tamaño del pincel.
Nuevo slide para seleccionar cualquier color no incluido en la paleta.
Capacidad para Midi, o el sintetizador que siempre use.
Capacidad de invertir la relación entre colores y sonidos.
Modo blanco, negro y grises.


Versión 29.

Ubiqué la paleta de colores arriba y le dibuje un sutil diseño de teclas de piano.
Para dar "affordance" de piano y ayudar a la intuición del usuario. Idea de Lu de Sal que funcionó muy bien :)

Sistituí todos los sliders de la librería ControlP5 por sliders caseros mas adaptados a cada función. Cuestion evidente en el slider de Hue, que ahora es mas un "colorpicker" casero.
Al no usar ControlP5 me ahorro 100kb que ocupa la librería.
Bajé de 600 a 500kbs que pesa el programa ahora.

Organicé el código en "void funciones()", ahora cada rutina está en una pestaña diferente y el programa prinicipal solo tiene llamados a esas funciones, pero no el cuerpo de codigo de cada una.
Orden y progreso!

Creé modo "Automatico" de escuchar.
Un bicho va caminando por la pantalla y cantando según el color por el que pasa.
Una flecha inquieta, mas bien.
Aprendí a hacerlos en el curso de formas de vida artificial aplicadas al arte a cargo del Ing. Emiliano Causa.

Me gustaría probar el programa con "eyetracking" para estar un paso mas cerca de "escuchar con los ojos" de la manera que este programa propone.

Por ahora esto es lo que hay para jugar:

Solo demuestra el concepto.

SoundPaint 14
http://openprocessing.org/visuals/?visualID=30729
Una versión básica.

SoundPaint 29
http://openprocessing.org/visuals/?visualID=31621
La última versión, sin capacidades de MIDI o carga de imagenes jpg, por ser un applet web.

Programas similares:

Al principio de este proyecto, 2008, empece por investigar y encontré 9 programas que convertian imagen a sonido de diferentes formas, algunas interactivas.

Audio Paint
El Audio Paint 1.0, publicado en el 2002
Ahora, 2011, va la 2.2

Permte escuchar el dibujo.
Al tocar un boton escanea la imagen de derecha a izquierda y genera sonido agudo si hay trazos en la parte alta de la imagen y graves para lo que uno dibujó abajo.
Pero como no encontré ninguno que lo hiciera como mi SoundPaint empece de cero, imaginando.

Singing Fingers
De julio del 2010, Singing Fingers 1.0
http://singingfingers.com/
Con el eslogan: "Finger Paint with Your Voice"

Publicada por Beginner's Mind, casi un año despues de que yo subí mi sketch "Color to Sound" a Openprocessing.
Les escribi mail para intercambiar experiencias.
Eric me contó como hizo para controlar el color del trazo analizando la nota musical predominante del microfono.

Aplica el mismo concepto de convertir color a notas musicales y viceversa.
Analizando la entrada de microfono y con la posibilidad de tocar la pantalla directamente.
Me encanta el giro que le dieron al concepto!
Con las posibilidades que brinda la IPad de Mac :)
La interactividad del Singing Fingers esta muy buena!
Beginner's Mind es un laboratorio de soft dependiente del Massachusetts Institute of Technology.

Igual mi enfoque viene siendo mas científico que lúdico, con Hertz y notas musicáles.
Y menos comercial, menos Ipod, Ipad, Ibook.
Mas Openpod, Openpad, Openbook, código abierto para desarrolladores y aplicación gratis para usuarios.
Arriba el software/hardware abierto!

Twinkle
Investigando mas encontre a Jay Silver, uno de los creadores del Singing Fingers.
Otro loco suelto que le gusta jugar con 555, computadoras y sensores.
Creó el Twinkle.
Basicamente una camara web con luz incorporada que al pasarla cerca de superficies de colores hace que el pc emita sonidos de diferentes notas segun el color de la superficie.

Algo similar a mi proyecto inicial que devino en el Sound Paint este que hice.
Cerrando la idea inicial que tuve respecto a los lapices lectores de códigos de barras.
Mi concepto es levemente diferente:
Mi lapiz lector de codigos de barras modificado convertiría a sonido las variaciones rugosas de la textura de un material sobre el que se pase el lapiz. El tono del sonido dependería de la velocidad con la que se pase el lapiz, y el timbre depende de la textura en si del material.
Con mi sistema, pasar el "lápiz mágico" por un plano rojo no produciría sonido, ya que no habrían variaciones por textura en un color liso.
Mi lapiz produciría sonido sobre una hoja blanca rallada de negro, donde el Twinkle no tiene colores que detectar y calla.
El Twinkle de Silver ve el color predominante del plano, no texturas.
Aca está en acción.
http://vimeo.com/10697723

Encontré esta página que documenta la relación entre colores y música a lo largo de la historia.
http://home.vicnet.net.au/~colmusic/
Sigo investigando una "correcta" relación entre colores y notas. O que aspectos de esa relación es mas interesante hacer configurables.

domingo, 16 de agosto de 2009

Color a sonido y Claroscuro a sonido.

Idea:
Mientras terminaba el Sinte Mouse 1 se me ocurrió otro “Circuit Bending”.
Algunos sistemas a los que hago mantenimiento en mi trabajo tienen lápices lectores de códigos de barras conectados. Estos tienen un emisor LED en la punta y un fototransistor detrás que recibe la luz rebotada por un agujero.
El voltaje en ese receptor varía con la opacidad del plano sobre el que se apoya el lápiz.
Pasarlo por un codigo de barras genera una onda cuadrada a la salida del sensor que puede ser decodificada como numeros y letras por el sistema digital.
También puede ser oída. El voltaje varía con el pasaje de blanco a negro de las barras o de cualquier cosa que exploremos y esa onda puede ser expresada por un parlante como sonido.
Sea una foto, un dibujo, una tabla de madera, piso monolítico, etc…

Proceso:
Puse entonces manos a la obra para “intervenir” algún lápiz lector roto de los que estan para tirar en el taller de mi trabajo.

Resultó una tarea muy compleja… y en el camino descubrí que seria muy difícil amplificar los picoVolts que salen del sensor sin crear enormes distorsiones. De hecho la curva de respuesta del foto transistor no es ni remotamente lineal porque esta pensado para alimentar un sistema logico de 0 y 1.
Yo estaba buscando un sistema lo mas fiel posible. Ademas rompí los dos lectores que tenia disponibles sin lograr acceder a los cables del sensor. F.U.B.A.R. :P

Idea y proceso 2:
Luego se me ocurrió que “escuchar colores” es algo que un programa de PC puede hacer.
Yo no sabía programación, pero iba a aprender…
Conozco la herramienta “cuentagotas” de Photoshop lee el codigo del color bajo el puntero del Mouse y nos permite copiar los valores RGB de ese píxel para poder poner ese color en nuestra paleta y pintar con él.
Le comenté eso a Daniel Argente y me dijo que creía haber visto un segmento de codigo de el lenguaje “Processing” que era capaz de hacer eso.
Empecé a investigar el lenguaje y códigos ya hechos que hicieran eso y uno para generar sonido.
Encontré el código “Píxel array”, un ejemplo guardado en "Topics" -> "Image processing".
Ese programa muestra una imagen y extrae el numero del color bajo el puntero del Mouse al pasarle por arriba. Ese numero esta en forma de variable en alguna parte del código.

Por otro lado encontre el codigo “Basic” de la librería Minim que permite generar un tono puro indicando parámetros como Frecuencia. Es el primer codigo de la librería “Minim”, encargada de generar y analizar audio.

Victor Gil, excompañero de liceo y estudiante de Ingeniería de Sistemas me ayudó a juntar los dos codigos en uno, de manera que se ejecutaran a la vez sin que diera error el compilador.
No es tan simple como pegarlos juntos en la misma página. Al menos para mi que, ni idea tengo.

Diego P. Vargas me ayudó a encontrar la variable del código del color en Píxel Array (aPixels[int(signal)]) para poder procesarla y usarla para setear la frecuencia del generador de onda.
No se que significa aPixels[int(signal)], pero al hacer "print" de esa variable y mover el mouse, parecia funcionar debidamente. Tomando valores negativos alrededor de cienmil.

Parte del proceso de esta variable era extraer el valor de “hue” o tono del codigo del color. La otra parte es “mapear” o “escalar” esa variable a Hertzs, que es el valor que acepta el generador de onda.
El valor de color es de 0 a 255 (8 bits). El rango y sentido de longitudes de onda que se tome es arbitrario. Se puede invertir la relación, o se puede tomar otro rango de frecuencias.

Por ejemplo:
Rojo = 50 hz (sonido grave)
Violeta = 5000 hz (sonido agudo)
Y todos los puntos intermedios se calculan automáticamente.

Este es el sentido que me pareció natural, ya que la frecuencia del rojo es la mas baja visible (400–484 THz), y el Violeta es la mas alta (668–789 THz).
No se si eso corresponda con la asociación sensible de la mayoría… A que tiene que sonar un Amarillo o un Verde?

Le presenté el primer resultado a Hector Laborde y me contó del “Piano de color” que él diseñó hace años. Surgió la idea de juntar los dos conceptos creando una imagen no figurativa que al explorarla sonara una melodía.
Se me ocurrió hacer una flecha en zigzag con franjas de colores a lo largo, de manera que al recorrerla con el Mouse la secuencia de colores recorridos se convierta en una secuencia de tonos sonoros.

Modifiqué el rango de frecuencias del oscilador a dos octavas, que el rango necesario para tocar “Feliz cumpleaños” en un piano de una mano.
Luego necesité averiguar según el rango continuo dado, qué valores de color correspondían a la frecuencia de qué nota.
Así generé una paleta de “colores sonoros” y fui pintando las franjas con el color de cada nota en secuencia.
Hice otra versión con valores de gris, y otra con color de nuevo pero esta vez usando un Generador de notas MIDI en vez de un Oscilador de onda Seno. Las notas MIDI son discretas (Do o Re, pero ningún valor intermedio) y se puede hacer que suene como cualquier instrumento, ej Piano, Trompeta, etc...

Quiero es escuchar video...
Estoy viendo como modificar un Mouse óptico para usarlo como camara y poder escuchar las texturas sobre las que pasemos el Mouse en tiempo real.
Tengo muchisimas dudas técnicas que me trancan, pero es posible.

Si a algún Programador Java o Ingeniero de Sistemas o Electronica le interesa participar de cualquier manera, Bienvenido!

Intento coordinar y asi unificación de procesos cerebrales:
Lo normal es pensar que en el cerebro hay zonas bien definidas y diferenciadas que procesan imagen, o sonido o tacto, etc… Cada zona con una estructura diseñada para ese fin especifico.
En realidad la especificidad esta en el sensor que envia la información (ojo, oído, nariz). Al llegar a la corteza cerebral ya es algo abstracto, información, que simplemente requiere síntesis y clasificación.
Por eso la corteza es casi homogénea y funcionalmente muy adaptable.
Cuando hay daño leve en la corteza las neuronas circundantes se adaptan y reconectan para cumplir las funciones de las neuronas muertas.
Al igual que el procesador de un PC, no distingue si esta enviando un mail, procesando video o simulando 3d. Los mismos nanotransistores sirven para todo si, estan debidamente interconectados.
Este proyecto apunta a coordinar dos procesos cerebrales (imagen y sonido) de manera interactiva e intentando que se mezclen y confundan. Intento crear correlación entre lo que se escucha y lo que se ve en el sentido mas amplio.
Similar a cuando uno se toca a si mismo: siente que toca y es tocado en dos sensaciones coordinadas y controlables.


Aca esta funcionando... descubran la canción pasando el mouse por la flecha!

http://www.openprocessing.org/visuals/?visualID=3733
Color traducído a tonos puros con paleta de notas.
Color cálido->Sonido grave
Color frío->Sonido agudo


http://www.openprocessing.org/visuals/?visualID=3740

Escala de grises traducído a tonos puros con paleta de notas.
Blanco->Sonido grave
Negro->Sonido agudo

http://www.openprocessing.org/visuals/?visualID=4121
Color traducído a notas de Secuenciador Midi con paleta de notas.
Color cálido->Nota grave
Color frío->Nota aguda

http://openprocessing.org/visuals/?visualID=10404

Color a tono puro, imagen de campo florido.
Color cálido->Sonido grave
Color frío->Sonido agudo