sábado, 14 de septiembre de 2013

SINTETIZADOR DE BATERÍA UTILIZANDO PROCESSING Y ANDROID

SINTETIZADOR DE BATERÍA UTILIZANDO PROCESSING Y ANDROID


Introducción a la batería y sus orígenes

Como definición, podemos decir que la batería es un conjunto de instrumentos de percusión formado por varios tambores y platos metálicos que se tocan mediante baquetas y pedales, cuya ejecución habitualmente corresponde a un solo músico.
Su función básica dentro de cualquier conjunto musical, es marcar el ritmo y los tiempos de la melodía, aunque con su evolución ha cobrado su propio protagonismo dentro de muchas bandas, sobre todo de Rock y Hard Rock, llegando a constituirse como un instrumento solista.
Composición de la batería moderna
La batería moderna se compone de varios elementos básicos como son los tambores y los platos existiendo varios tipos de ambos, a los que se pueden añadir otra serie de instrumentos como cencerros, panderetas, gongs o bloques de madera, entre otros.
Así la batería se construye en base a las necesidades y gustos del guitarrista, llegando a extremos verdaderamente complejos como la que ejecuta por ejemplo el virtuoso Mike Portnoy.
Los tambores en la batería
Lo habitual es que estén fabricados en madera y tengan un parche fabricado en plástico, en cada uno de sus extremos, uno de golpeo y otro resonante.
Existen varios tipos de tambores en la batería:
·         Bombo. Se toca a través de un pedal al que se une una maza. Es el tambor de mayor tamaño en la batería y aporta los sonidos más graves al conjunto.
·         Caja. Su función es marcar los compases. Tiene poca altura y se caracteriza por la existencia en su parche inferior de unas hebras o bordones que le dan un sonido característico, estridente y metálico.
·         Tom toms. Son timbales colocados generalmente sobre el bombo y pueden variar sus tamaños y tono.
·         Tom base. Su sonido es más grave que el de los otros toms y suele estar situado sobre patas individuales.
Los platos en la batería
Construidos normalmente en una aleación de bronce a latón, con una estructura cóncava y agujereado en su centro, presentan diversas clases:
·         Hi hats. Se compone de dos platillos instalados sobre un soporte de metal y tocados con un pedal que al accionarse permite que uno caiga sobre otro generando un sonido característico.
·         Existen además muchos otros tipos de plato que varían en función del tamaño y la sonoridad emitida y que tiene diversos nombres como por ejemplo, Ride, Splash, Crash Ride, China, Cup Chime, Bell o Choper.
Forma de ejecución de la batería, las baquetas
Además de los pedales, la forma de tocar la batería pasa por el uso de baquetas que se construyen en diversos materiales y con distintos pesos para favorecer la velocidad de ejecución.
Pero además de las baquetas y con el objetivo de conseguir diferentes sonidos, también se utilizan escobillas o escobetillas, baquetones de goma o de fieltro.
Orígenes de la batería
La batería nace a finales del siglo XIX y principios del XX en Estados Unidos, como la unión de diversos instrumentos de percusión presentes en distintas partes del mundo y su nacimiento está enlazado con la aparición de la música Jazz.
Así, el bombo y la caja vienen de Europa, los platos de Turquía y de China, los toms de China, de Africa y de los indios Americanos.
Inicialmente su ejecución se encargaba a varios percusionistas, pero con la aparición del pie de caja y del pie de bombo en 1910 y el ensamblaje de todos los instrumentos, se consigue que un sólo músico sea capaz de tocar toda la percusión; así que se podría decir que ese fue el nacimiento de la batería tal y como la conocemos en la actualidad.
Al principio comienza siendo un instrumento que sirve exclusivamente para mantener el ritmo y marcar los tiempos de la melodía, pero a finales de los años 20, surgen los primeros virtuosos de la batería como Baby Dodds o Zutty Singleton, que empiezan a introducir solos y a reclamar el protagonismo que le corresponde al instrumento.
A partir de esos momentos y con la mejora de materiales, la batería empezó a ser utilizada en casi todos los estilos musicales, teniendo su punto de mayor auge en los años 50 con el nacimiento del sonido Rock 'n Roll, donde consiguió alcanzar la categoría de imprescindible para cualquier composición musical.

EXPLICACION DEL CODIGO EN PROCESSING
A continuación explicare paso a paso cada segmento de código en el orden de su ejecución en processing.
Para el desarrollo del sintetizador se utilizara la librería MaximJava_api, la cual estará incluida en el enlace que publicaré a final donde podrán encontrar una carpeta con los archivos correspondientes al proyecto completo.
Declaración de variables como formato de audio para que la librería reconozca, en este caso se utilizan archivos de audio .wav
Maxim maxi;
AudioPlayer t1; AudioPlayer t2; AudioPlayer t3; AudioPlayer t4; AudioPlayer t5; AudioPlayer t6; AudioPlayer t7; AudioPlayer t8; AudioPlayer t9; AudioPlayer t10; AudioPlayer t11; AudioPlayer t12; AudioPlayer t13; AudioPlayer t14; AudioPlayer t15;
Luego se declaran las variables donde se guardará el fondo de la aplicación y las que controlaran en color (RGB) de la selección del objeto que suena al presionar o hacer click sobre él.
PImage bateria;
int R=0; int G=0; int B=0;
En el void setup se le asignan o cargan a todas las variables su archivo correspondiente y configuraciones que tendrán una vez empiece a ejecutarse el programa.
void setup() // Configuracion Principal y carga de variables
{bateria = loadImage("bateria.jpg"); //Carga la imagen de fondo guardada en el folder data del proyecto.
size(bateria.width, bateria.height); //Asignar el tamaño de la Interfaz igual que el tamaña de la Imagen cargada
maxi = new Maxim(this); //objeto maxi inicio
Se cargar los sonidos de cada tambor a la variable teniendo en cuenta que cada sonido debe estar guardado en la carpeta “data” que se encuentra junto al archivo de nuestro proyecto, de lo contrario se tendrá que especificar la dirección exacta donde se encuentre el archivo .wav.
asi: variable = maxi.loadFile("Letra Disco:\ Direccion del Archivo\ nombre.extencion");
t1 = maxi.loadFile("t1.wav"); //cargar archivo de sonido .wav
t2 = maxi.loadFile("t2.wav"); t3 = maxi.loadFile("t3.wav");
t4 = maxi.loadFile("t4.wav"); t5 = maxi.loadFile("t5.wav");
t6 = maxi.loadFile("t6.wav"); t7 = maxi.loadFile("t7.wav");
t8 = maxi.loadFile("t8.wav"); t9 = maxi.loadFile("t9.wav");
t10 = maxi.loadFile("t10.wav"); t11 = maxi.loadFile("t11.wav");
t12 = maxi.loadFile("t12.wav"); t13 = maxi.loadFile("t13.wav");
t14 = maxi.loadFile("t14.wav"); t15 = maxi.loadFile("t15.wav");
Para evitar que el sonido se siga reproduciendo continuamente una vez sea reproducido al dar click sobre el instrumento.
t1.setLooping(false); t2.setLooping(false);  t3.setLooping(false);
t4.setLooping(false); t5.setLooping(false); t6.setLooping(false);
t7.setLooping(false); t8.setLooping(false); t9.setLooping(false);
t10.setLooping(false); t11.setLooping(false); t12.setLooping(false);
t13.setLooping(false); t14.setLooping(false); t15.setLooping(false);}
El void draw() se encarga de hacer toda la configuración grafica que tendrá nuestra aplicación en este caso solo pondremos una imagen de fondo de medidas (800p x 600p) para la de escritorio y (480p x 320p) para el Android.
void draw()
{  image(bateria, 0, 0); //Fondo de La aplicación en la posición (0,0) de la pantalla }
En el void mousePressed()  se detecta la posición donde se encuentre el mouse cada vez que sea presionado y ejecutar el sonido correspondiente
Void mouse
{ println(mouseX); println(mouseY);  //Imprime la Posiciones del mouse en coordenada (x,y)
Para controlar las variables del color de la selección
If (dist(83,498 , mouseX, mouseY) <=16) //Preguntar si el cursor del mouse se presiona cerca de la región con centro (x,y)= 83,498 y que se encuentre en un radio de 16 Pixeles a la redonda.
 { R = R+10;  // Aumentar el color R de 10 en 10 Hasta los 255
 fill(R, G, B, 115); //Color de la selección formada por la elipse
 ellipse(83,498 ,32 , 32); //ubicación de la elipse que marcará la selección
(Centro(x,y) ; Diametro X ; Diametro Y);   frameRate(5);
 if (R>=255) //para no permitir que R supere el valor de 255 y mandar un mensaje de que llego al máximo.
        { R=255;
        print(R);
        print(" es Maximo Valor de R \n");  }   }
Para el botón que reduce el valor de R al hacer click sobre el signo (-) de la imagen.
if (dist(34,498 , mouseX, mouseY) <=16)
     {    R = R-10;
      fill(R, G, B, 115);    ellipse(34,498 , 32, 32);    frameRate(5);
      if (R<=0)
        {R=0;      print(R);      print(" es el Mininimo Valor de R \n");  }    }
Este código se repite para cada Letra de los colores R, G y B cambiando la posición de los pixeles donde se encuentra la letra en la imagen con un radio de 16p para su selección.
El siguiente código se repite para cada instrumento por tanto solo explicaré el funcionamiento de uno de ellos:
En el condicional se pregunta cada vez que presionamos el mouse si la distancia entre el centro de nuestro instrumento y donde hacemos el click es menor al radio estipulado para ese instrumento.
Donde el radio en cada instrumento es diferente debido a que la imagen que tenemos no tiene figuras del mismo tamaño y de la misma figura por lo que debemos crear elipses en vez de círculos y esto nos genera un margen de error muy pequeño con respecto a la precisión que tendremos para seleccionar un determinado objeto.
Para encontrar cada posición de centro, radio y diámetros utilice una tabla de Excel para la cual dándole las posiciones de los bordes X e Y máximos y mínimos me determinara el radio y el diámetro que se utilizaría en las funciones ellipse y dist.
If (dist(124,194 , mouseX, mouseY) <=62) //(centroX, CentroY, PosicionMouseX, PosicionMouseY  <= Radio de la selección) Preguntar si la distancia del centro a la posición del mouse es menor a el radio.
 { t1.play();  //reproducir el sonido cuando se cumpla la condición.
 fill(R, G, B, 115); //color de la elipse que se dibujará y que depende del color asignado en los controles de RGB
ellipse(124,194 ,141 ,108 ); // (centroX, CentroY, DiametroX, DiametroY) para la elipse del instrumento
frameRate(5); //velocidad o tiempo en que se disolverá la selección.
}
Repitiendo el anterior código 14 veces ya que son 15 sonidos diferentes.
Para la implementación del código en android solo incluye la librería Android_api en nuestro proyecto y se deben cambiar los pixeles de cada instrumento debido a que la resolución no es la misma.
Finalidad del proyecto
La aplicación incluiría interacción con Arduino por medio del cual cada vez que se produzca un sonido en la aplicación controle el ritmo de unas luces que se encuentran en un circuito externo.
La aplicación no se puedo terminar debido que se presentó un error con referencia al SO de mi PC y no reconoce algunos controladores del Arduino.
En el siguiente link se encuentra tanto el código de Processing Como el de Android. Para utilizar el de android deben indagar sobre como instalar un adt, sdk de android y fusionar ambas plataformas.
Link de la carpeta Public de Dropbox con 6,1MB
Documento en Work
https://dl.dropboxusercontent.com/u/98046791/SINTETIZADOR%20DE%20BATERIA%20UTILIZANDO%20PROCESSING%20Y%20ANDROID.docx

Por FRANK HERRERA OSPINO  
Código: 2009219036
Universidad del Magdalena
Programa de Ingeniería Electrónica




No hay comentarios:

Publicar un comentario