Ejercicio: Barco musical

De Edutec Wiki
Saltar a: navegación, buscar

Introducción

Este ejercicio propone una serie de elementos interactivos para tocar notas musicales utilizando diferentes instrumentos.

Las melodías se pueden tanto guardar como reproducir mediante el uso de listas y mensajes de Scratch.

El objetivo principal es que cuando el usuario clique en un objeto, éste reproducirá una nota y la guardará en una lista para su posterior reproducción. Si queremos añadirle un poco de diversificación, cada objeto puede "sonar" con un instrumento musical o efecto de sonido distinto antes de reproducir y guardar la nota.

RTENOTITLE

 

Pintando escenario y objetos

En este ejercicio crearemos nosotros mismos la apariencia del escenario y de los objetos, aunque también es posible importar imágenes prediseñadas como ya hemos visto en otros casos. En nuestro caso hemos elegido una escena donde aparecerá un barco sobre el mar y un sol, pudiéndole añadir más objetos como por ejemplo un pájaro. Podemos incluso hacer que cada rayo del sol sea un objeto diferente. Cada uno será capaz de tocar y guardar una nota cuando el usuario clique sobre él. Si nos queremos ahorrar el trabajo de crearlo todo desde cero, tenemos una plantilla disponible aquí.

Si queremos tocar las siete notas (do, re, mi, fa, sol, la, si) deberíamos tener siete rayos de sol, uno por nota.

Tocando notas

Una vez tenemos los objetos creados (luego podemos añadir más), podemos empezar haciendo con cualquiera los rayos del sol.

RTENOTITLE

 

Podemos cambiar el instrumento y la nota en vez de dejar los que vienen por defecto. Opcionalmente podríamos añadirle algún efecto visual, como si se "iluminase" el objeto al tocar en él:

RTENOTITLE

 

No debemos olvidarnos de quitar el efecto gráfico una vez tocada la nota para que vuelva al color original. Podemos ir probando diferentes valores en el efecto color para ver cual nos gusta más. Ya que cada rayo de sol tocará una nota diferente, también podemos hacer que el efecto de color aplicado a cada uno de ellos también sea distinto.

 

Guardando notas en lista

Ahora que tenemos la parte de tocar la nota, vamos a cómo guardarla. Crearemos una lista y le pondremos de nombre "notas", por ejemplo.

Barco musical 04.png

 

Barco musical 05.png

 

Una vez creada, para añadirle una nota usaremos el siguiente bloque:

RTENOTITLE

 

Y qué hemos de añadir exactamente? Podríamos guardar el mismo número que representa la nota, para luego hacer un bloque que vaya reproduciéndolas desde la lista una a una. Pero dado que ya tenemos un bloque que ya reproduce una nota y además ilumina el objeto cuando lo tocamos, podemos hacer que esto lo ejecute mediante la recepción de un mensaje:

RTENOTITLE

 

Así sólo hará falta enviar el mensaje do para hacer que suene la nota y además que se ilumine el objeto que la reproduce. Ahora ya podemos usar el bloque para añadir la nota a la lista:

Barco musical 08.png

 

Ahora si clicamos encima del rayo de sol podremos ver como va añadiendo notas a la lista. Una vez comprobado que funciona, podemos programar los demás rayos de sol de la misma forma, cambiando tanto el mensaje a enviar como la nota a guardar y la nota a reproducir.

Reproduciendo las notas

Una vez hecho esto y después de haber probado el comportamiento de cada rayo de sol, vamos a ver cómo podemos reproducir la melodía cuando, por ejemplo, cliquemos en el sol. Si hemos tocado cada rayo de sol por orden de notas, deberíamos tener la siguiente lista:

Barco musical 09.png

 

Como los nombres de los mensajes que hemos creado corresponden a los mismos nombres de las notas guardadas en la lista, lo único que tenemos que hacer es recorrer la lista y enviar el mensaje que hay en cada posición. Como hemos de repetir una acción varias veces, necesitamos el siguiente bloque:

Barco musical 10.png

 

Cuántas veces necesito repetir la operación? Tantas como notas tenga la lista, o dicho de otra manera, su longitud:

Barco musical 11.png

 

Y cómo puedo extraer el mensaje que hay en una posición concreta de la lista? Mediante este bloque:

Barco musical 12.png

 

Con lo cual si enviamos el mensaje que nos devuelve el último bloque, la cosa quedaría así:

Barco musical 13.png

 

Es correcto? No hace falta ni probarlo para ver que no lo es, ya que lo que hará será repetir el envío de mensaje tantas veces como notas haya (en este caso 7), pero dicho mensaje siempre es el mismo (do), con lo que sonará 7 veces la misma nota. Si necesitamos un número que apunte la posición del mensaje dentro de la lista y además que vaya variando en cada repetición, necesitamos una variable.

Qué valor ha de tener la variable al principio? Como las listas en Scratch empiezan por 1, ése será su valor inicial. Además, en cada repetición aumentará su valor en 1:

Barco musical 14.png