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.

1 comentario:

Federico Requena dijo...

Muy interesante todo lo que vengo encontrando en el blog. Zarpado!