En este minitutorial voy a intentar explicar la forma de hacer musicogramas con Flash. Le dedico este tutorial especialmente a Nani, a la que quedé en pasárselo ya hace meses. Más vale tarde que nunca.
El resultado que se trata de conseguir es algo así: Pincha aquí para pantalla completa
Generalmente los alumnos siguen los musicogramas sobre el papel señalando rítmicamente sobre los dibujos de corazones u otros simbolos que representen el pulso musical. Así que esta actividad puede ejemplificar lo que han de hacer, y pueden además intentar seguirla señalando en la PDI. Una variante, que podemos ver más adelante, es hacerla aún más interactiva, de forma que si el alumno no la sigue 'a tempo', ésta pueda pararse y dar un mensaje de error, o bien de felicitación al acabar en caso contrario.
Se trata de un musicograma muy simple, pero la dinámica es válida para cualquiera otra que queramos realizar, cambiando solamente los elementos gráficos y decorativos, o aumentando el número de acciones (letra que aparezca tipo karaoke, etc) Es posible que haya formas más eficaces de hacerla, en cuyo caso sería de agradecer que se postearan.
Esquema general
En esencia, lo que queremos conseguir es reproducir una canción y que, en determinados instantes de esta reproducción, aparezcan elementos gráficos en la escena. Por tanto, tendremos que introducir en la escena un archivo de sonido con sus correspondientes botones de reproducción, y definir unas funciones que se ejecuten cuando el archivo de sonido pase por determinados tiempos.
Paso 1 Preparando elementos de la escena.
Como se puede ver, ésta consta simplemente del título, la letra de la canción y 16 dibujos de corazones que representan el pulso musical y que deben ir apareciendo a tiempo conforme la música va sonando. Estos son instancias de un símbolo y les hemos puesto nombres de instancia c1, c2....c16
//VINCULANDO WAV
musica1 = "XimoBoticari.wav"; //asignamos una variable al wav vinculado
sonidoCancion = new Sound(); //creamos un objeto de sonido
sonidoCancion.attachSound(musica1);// relacionamos ese objeto con la variable del wav
Ahora tenemos un objeto de sonido, 'sonidoCancion' que podemos manejar con ActionScript
4) Botones Play/Pause y Stop
//Definimos una variable que almacenará el punto de la canción (en milisegundos)en que nos encontramos.
//Su valor inicial será 0 (inicio de la canción);
var pausa:Number = 0;//+++++++++++++++++++++++++++//ACCIONES DEL BOTON 'PLAY' al soltar el boton del ratónbtn_play.onRelease =function(){//la canción comienza a sonar desde el principio la primera vez o desde el segundo en que se ha hecho pause,sonidoCancion.start(pausa / 1000);// La canción está sonando así que hacemos que el botón play se vuelva invisible y el pause visible.this._visible = 0;btn_pause._visible = 1;};//++++++++++++++++++++++++++++//ACCIONES DEL BOTON PAUSE al soltar el boton del ratónbtn_pause.onRelease =function(){//almacena la posición de la canción en el momento de hacer pausepausa = sonidoCancion.position;//detiene la reproducciónsonidoCancion.stop();//A la inversa que con play. El botón pause se hace invisible y el play visiblethis._visible = 0;btn_play._visible = 1;};//++++++++++++++++++//ACCIONES DEL BOTON 'STOP'btn_stop.onRelease = function(){//detiene la reproducciónsonidoCancion.stop();//pone la variable 'pausa' a 0;pausa = 0;//hace visible el boton play e invisible el pausebtn_play._visible = 1;btn_pause._visible = 0;};
//Array que contiene los tiempos de cada pulso musical de la melodíatiempoCancion = new Array(0, 5960, 6665, 7370, 8075, 8780, 9485, 10190, 10895, 11600, 12305, 13010, 13715, 14420, 15125, 15830, 16535, 17240);
//++++++++++++++++++++++++++++++corazones = new Array(0, "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17");for (a = 0; a < 20; a++){_root[corazones[a]]._visible = 0;}//+++++++++++++++++++++++++++++++Ahora vamos a definir una función, 'mostrarPulsación', que irá haciendo visibles los corazones cuando la canción pase por los tiempos definidos en el array 'tiempoCanción'//++++++++++++++++++++++++++++++++function mostrarPulsacion(){if ((sonidoCancion.position > tiempoCancion[n]) && (sonidoCancion.position < tiempoCancion[n + 1])){_root[corazones[n]]._visible = 1;}//cuando la canción rebasa lif ((sonidoCancion.position > tiempoCancion[n + 1]) && (sonidoCancion.position < tiempoCancion[n + 2])){n++;}}//++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++btn_play.onRelease = function(){//la canción comienza a sonar desde el principio la primera vez o desde el segundo en que se ha hecho pause,sonidoCancion.start(pausa / 1000);//se ejecuta la función 'mostrarPulsacion'mostrarPulsacion();//definimos un setInterval que compruebe como está todo cada 20 msrefresco = setInterval(mostrarPulsacion, 20);// La canción está sonando así que hacemos que el botón play se vuelva invisible y el pause visible.this._visible = 0;btn_pause._visible = 1;};//+++++++++++++++++++++++++++++++++++++++++
Comentar
Aquí va mi primer musicograma, por si a alguien le sirve.
Li ensenyaré al Profe de música de l'escola.
Gràcies pel treball
Gracias Roger.
Convertirlo en generador me temo que se sale de mis conocimientos. Lo que si es posible porque lo he probado es que el texto aparezca estilo 'karaoke' utilizando cuadros de texto dinámicos y arrays conteniendo las sílabas. Sin embargo, no estoy tan seguro de la utilidad pedagógica de esta característica. De hecho, los alumnos cantan y expresan mucho mejor si el aprendizaje de la canción se hace por imitación vocal que cuando se apoya en texto escrito y yo empiezo siempre los aprendizajes de manera exclusivamente oral. Y lo que estoy estudiando y no tengo resuelto aún es hacer que el alumno pueda seguir el musicograma sobre la PDI. Si señala las pulsaciones fuera de tempo (dando una tolerancia, claro) debería salirle un mensaje de error. En caso contrario, una felicitación al finalizar la canción.
Saludos y felicitaciones por tu magnífica labor.
© 2024 Creado por roger. Tecnología de
¡Necesitas ser un miembro de genmagic para añadir comentarios!
Participar en genmagic