viernes, 13 de septiembre de 2013

Proyecto DJ-Drums en Processing

Con la ayuda de Processing se creó esta aplicación, la cual es capaz de darnos la sensación de usar una batería real ya que al utilizarla en un dispositivo Android con pantalla táctil, nos permite tocar sobre las diferentes partes del instrumento, y reproducir el sonido correspondiente.
Entre las partes que se incluyeron de una batería real en este programa tenemos:


·         Kick
·         Hi-Hat
·         Crash
·         Splash
·         Toms
·         Snare
·         Ride
·         Floor




Antes de explicar el proceso de desarrollo de la aplicación hay que tener claro el concepto de objeto y clase en el campo de la programación.
Una clase es un modelo que define las variables y métodos comunes a todos los objetos de un cierto tipo; Un ejemplo de esto es cuando haces galletas de figura de estrellas la clase seria el molde. Las función principal de una clase es la que define las características de un conjunto de objetos que comparten algunas características como: almacenar los mismos tipos de datos y pueden ejecutar las mismas operaciones.
Un objeto es una instancia (Proceso de creación de un objeto de una clase) de una clase. Estos constas de una estructura y al igual que los objetos del mundo real comparte dos características: estado (Atributos) y comportamiento (Operaciones).
En este orden de ideas que una clase es la encargada tanto de darle la estructura a los objetos, como el comportamiento de los mismos.
Teniendo esto en cuenta, la programación de esta aplicación se hizo basándose en la utilización de objetos, lo cual ha hecho que este sea más limpio y eficiente. Se definió un objeto por cada parte de la batería los cuales fueron declarados por su nombre como tal, y estos se declararon bajo una clase llamada Drum. Cada uno de estos objetos es en realidad para la creación de un botón de forma circular, con unas dimensiones y posición específica, el cual será el encargado de reproducir el sonido, y agregar algunos efectos gráficos.
En la estructura de los objetos se tuvo en cuenta entonces el la posición central del circulo que se adaptara a la imagen de fondo, el radio del circulo y el nombre del archivo de sonido que debe reproducirse al darle clic.
Todas estas dimensiones son recalculadas para adaptarse al ratio entre el ancho y alto de la ventana de manera que si el tamaño de la pantalla del dispositivo cambia, la imagen no se distorsionara, ni los botones estarán fuera de posición.
En la clase Drum, se crearon tres funciones, overDrum, la cual es la encargada de detectar si la persona está tocando dentro del radio de alguno de los círculos; tap, esta función realiza un pequeño efecto grafico cuando se toca la pantalla en botones, el cual se ve como un circulo  que aparece y se desvanece con el tiempo, de afuera hacia adentro, lo cual fue logrado aprovechando algunas funciones de Processing para definir la transparencia de los dibujados; por último se encuentra la función beat, la cual simplemente reproduce los sonidos que debe tener cada parte de la batería, en esta parte se resolvió un problema de la librería Maxim (Utilizada para cargar los archivos de sonidos y reproducirlos), el cual consiste en que si se usa el mismo objeto AudioPLayer para reproducir varios archivos de sonido a la vez, o muy rápidamente (lo cual podría ocurrir al usar una batería) el programa debe esperar a que termine de sonar un archivo para luego reproducir otro. La solución dada fue crear un vector de objetos Reproductores de audio, y cargarles secuencialmente el sonido el usuario pida que vaya reproduciendo, sobrescribiéndose a sí misma cuando ya se haya utilizado todos los espacios del vector.


Source Code
Desarrollado por: Miguel Romero Geraldino
                                                                                                                                                                          

No hay comentarios:

Publicar un comentario