martes, 17 de septiembre de 2013

Clarinete, Interfaz Grafico En Processing

Control I - Clarinete, Interfaz Grafico En Processing
Por: Luis D. Sierra C.

Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java, de fácil utilización. 

En este caso se hará una pequeña aplicación que demuestre que tan fácil es programar en él (sin necesidad de tener conocimientos extensos en java), dicha aplicación será una especie de modelamiento entre la interfaz gráfica de Processing y un instrumento musical. ¿Con que motivo? Para demostrar que para este software se pueden tener infinitas posibilidades en cuanto áreas de  trabajo se refiere en cuestiones de efectos gráficos, herramientas multimedia, recursos interactivos etc… todo esto solo limitado a cuanto te lo permitas tu imaginación.

El instrumento

El instrumento sobre el cual trabajare será el clarinete, este instrumento aunque es poco conocido es un instrumento musical de la familia de los aerófonos, de viento madera, se encuentra en la sección del viento-madera, junto a la flauta, el oboe, el corno inglés y el fagot. En nuestro país se le podrá ver y escuchar en los bailes típicos de la región caribe.

¿Comenzamos ya? ¡Listo!
Primero que todo como se mencionó anteriormente uno de los límites lo pone la imaginación, y la imaginación es de cada quien….en este caso cada quien tendrá una idea (guidado por razones como experiencia, creatividad e ingenio) de como querrá hacer sus programa, estructura del código, sentencias a usar, librerías que utilizar en fin, mi idea la describiré a continuación:

1    Necesitare para la implementación en el software Processing, los sonidos que se utilizare para reproducir el  clarinete, estos los conseguí gracias  a la página web www.freeecardgreeting.ne y más precisamente en la dirección http://www.freeecardgreeting.net/home/clarinet_online.php allí solo encontré los acordes pero estos no están disponibles para descargar, lo cual me hizo buscar ayuda de un software que me permitiera grabar, editar y amplificar un poco los sonidos (desde la página se notan algo tenues) es así en donde decidí utilizar el programa (por recomendación de mis compañeros), Audacity:



Teniendo los sonidos ya grabados (en extensión .wav y con duración de 1 segundo aproximadamente) continuemos con nuestro paso a paso.

2.    Saber dentro del programa que librerías usare y la estructura del código en general, teniendo en cuenta que uno de nuestros intereses principales es gastar la mínima memoria requerida para ejecutar el programa. Para nuestro código usaremos las librerías PImage img; Maxim maxim; que en ese orden son: la librería encargada de almacenar y cargar las imágenes del programa, encargada de la reproducción de sonidos .wav y por ultimo

Explicación del código y estructura:
El código es sumamente sencillo y después de esta breve explicación se podrá observar. Primero que todo inicializamos las variables e incluimos las librerías antes mencionadas en el programa.
La aplicación comienza mostrando la imagen principal. Esta:


clarinete.png

En la cual se ve nuestro instrumento y en la parte inferior izquierdas las notas que se podrían tocar (solo se podrán tocar 14 entre notas mayores y menores),  estamos utilizando en primera medida las teclas del computador. Si el usuario no toca ninguna tecla el programa siempre estará cargando la imagen interior, si el usuario presiona una tecla el programa la leerá y comparara con las que si cumplen una función en el programa, dicha acción la hace gracias a sentencia keyPressed que lee el teclado. Por ejemplo, para este código las notas y teclas asignadas así:

q/DO
w/RE
e/MI
r/FA
t/SOL
y/LA
u/SI
a/do
s/re
d/mi
f/fa
g/sol
h/la
j/si

Letra (minúscula) en el teclado asignada a una nota.

Como el código se está ejecutando siempre si el usuario presiona una de estas teclas entra a un ciclo if  y realiza la siguiente acción:

1.     Carga otra imagen, esta vez sale el clarinete mostrando cuales son las aberturas del instrumento que se deben cerrar con los dedos para producir dicho acorde, también se muestra abajo, el acorde que esta sonando. acá un ejemplo:

Nota DO, al presionar la tecla q (DO.png)

2.     También dentro de este mismo if se ejecuta el comando player = maxim.loadFile("DO.wav"); que es quien carga el sonido que anteriormente se había grabado en Audacity, player.cue(0); hace que el sonido suene solo una vez y por ultimo player.play(); hace que el sonido se reproduzca .

En resumen se tienen, 14 sonidos .wav y 14 imágenes .png, este es resumen la estructura del código. Habrá entonces 14 if para cada tecla y acorde. Siempre se cargara una imagen por cada tecla que se oprima y es obvio decir que si se presionan teclas que no están en el código el programa no hará nada. A continuación se muestra el código.

Código
int x=0;
PImage img;
Maxim maxim;
AudioPlayer player;

void setup()
{
img=loadImage("clarinete.png");
size(img.width, img.height);
}

void draw(){image(img, 0, 0);
if (mousePressed == true){ 
x=1;
println(x);
}else{
x=0;
 
}
}

void keyPressed()
{

if ((key == 'q))
{
img=loadImage("DO.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("DO.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'a')) {
img=loadImage("do.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("dom.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'w')) {
img=loadImage("RE.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("RE.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 's'))
{
img=loadImage("re.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("re.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'e'))
{
img=loadImage("mi.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("MI.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'd'))
{
img=loadImage("mi.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("mi.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'r'))
{
img=loadImage("FA.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("FA.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'f'))
{
img=loadImage("fa.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("fa.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 't'))
{
img=loadImage("SOL.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("SOL.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'g'))
{
img=loadImage("sol.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("sol.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'y')) {
img=loadImage("LA.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("LA.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'h'))
{
img=loadImage("la.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("la.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'u'))
{
img=loadImage("SI.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("SI.wav");
player.setLooping(false);
player.cue(0);
player.play();
}

if ((key == 'j')) {
img=loadImage("si.png");
size(img.width, img.height);
maxim = new Maxim(this);
player = maxim.loadFile("si.wav");
player.setLooping(false);
player.cue(0);
player.play();}
}

Presentado Por:
Luis D. Sierra C.

No hay comentarios:

Publicar un comentario