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