Música y sonido con micro:bit

Una pequeña melodía

Secuencias

By pressing down a little key, it plays a little melody.

Kraftwerk, "Pocket Calculator", 1981

El menú Música de MakeCode contiene muchos bloques para producir sonidos y melodías. La forma más rápida de generar una pequeña melodía es introducir en el código el bloque play melody. En el ejemplo siguiente, al pulsar el botón A sonará una melodía pregrabada elegida de una lista desplegable.

Play melody.png

La melodía suena en el fondo, in background, por lo que el resto del código que haya sido introducido en micro:bit seguirá ejecutándose mientras suene la música.

La opción  hasta que termine detiene la ejecución del código hasta que finalice la melodía.

La opción looping in background hace sonar la música continuamente mientras se ejecuta el resto del código programado en micro:bit.

También es posible programar pequeñas melodías usando el bloque play melody at tempo. En el monento de programar, el bloque despliega un secuenciador gráfico de ocho notas y una octava, en el que las notas están codificadas por colores. Además, el bloque permite elegir el tempo de reproducción en bpm o pulsos por minuto. Vamos a usar el bloque play melody at tempo para codificar un arpegio que suene a 240 bpm al pulsar el botón B:

Secuenciador.png

Adicionalmente, el bloque play melody at tempo dispone de varias secuencias programadas, a las que se accede pulsando sobre el botón Galería.

Galería de melodías.pngMelodías y efectos de sonido

El bloque play contiene varias melodías pregrabadas, que pueden seleccionarse mediante una lista desplegable.

Play 2.png

Con la versión 2 de micro:bit podemos añadir efectos de sonido por medio del bloque play.  De nuevo, al pulsar sobre el bloque se desplegará una lista de los efectos disponibles.

El programa de la figura usa play para hacer que suene el efecto misterioso cuando micro:bit sea agitado.

Play sounds.png

Grabadora de sonidos

La versión 2 de micro:bit tiene la capacidad de grabar sonidos gracias a su micrófono integrado. El sonido grabado puede reproducirse con el altavoz de la placa aunque, debido a su pequeño tamaño, la calidad es algo pobre. A pesar de ello, experimentar con la grabación del sonido siempre producirá resultados interesantes.

El sonido grabado se guarda en la memoria RAM de la placa, por lo que se borrará cuando se desconecte la alimentación.

Cuando se accede al entorno de MakeCode no aparece ningún menú de bloques relacionados con la grabación o con la reproducción del sonido. Resulta por lo tanto necesario cargarlo como una extensión del lenguaje de bloques de micro:bit. Para ello hay que pulsar sobre el menú Extensiones de la caja de herramientas de MakeCode y seleccionar audio-recording. Tras unos instantes, aparecerá en  la caja de herramientas un nuevo menú llamado Record.

Menú record.png

Con la nueva extensión ya cargada, podemos pasar a codificar un sencillo grabador y reproductor de sonido.

El programa debe grabar un sonido cuando se pulse el botón A y debe reproducirlo al pulsar el botón B. Durante la grabación mostraremos en pantalla el icono universal record (algo parecido a un círculo) y durante la reproducción mostraremos el icono universal play (un triángulo apuntando hacia la derecha). Cuando el programa termine de grabar o de reproducir, debe mostrar el icono pause (dos barras verticales). El programa puede ser algo parecido a esto:

Código grabadora.png

Una vez introducido el código, el simulador de MakeCode nos ofrecerá la posibilidad de probar el funcionamiento del programa sin necesidad de descargarlo previamente en la placa. Para ello usará el micrófono y el altavoz de nuestro ordenador.

La duración del mensaje grabado es de unos 6 segundos.

Adicionalmente, podemos usar el evento al iniciar para ajustar al máximo la calidad y la sensibilidad del micro.

Al iniciar grabadora.png

Set sample rate to 22000 for everything indica que tanto la grabación como la reproducción del sonido se realizarán tomando 22000 muestras o lecturas de la onda sonora por segundo.

Fray Santiago

Por medio del bloque play tone, del menú Música, micro:bit puede reproducir melodías algo más complejas. Hay que recordar que para poder reproducir la melodía es necesario disponer de una tarjeta de la versión 2, ya que la primera versión de micro:bit no dispone de altavoz integrado.

A modo de ejemplo vamos a codificar la melodía Fray Santiago, cuya partitura se muestra a continuación:

Partitura Fray.png

De acuerdo con la partitura, las notas musicales que hay que reproducir son:

Do-Re-Mi-Do (2 compases)

Mi-Fa-Sol (2 compases)

Sol-La-Sol-Fa-Mi-Do (2 compases)

Re-Sol-Do (2 compases)

El bloque play tone da la posibilidad de ajustar la duración de las notas en pulsos. Algunas de las notas de Fray Santiago son negras, por lo que durarán un pulso. Otras son corcheas y deben durar la mitad de una negra, es decir, medio pulso. Las blancas tendrán una duración de dos pulsos.

Usaremos un evento si agitado para que la música se inicie al sacudir la tarjeta. Como cada compás se repite dos veces, deben usarse varios bucles repetir 2 veces para ahorrar líneas de código. Aplicando todo lo expuesto, el programa tendrá el siguiente aspecto:

Fray Santiago.jpg

Cuando el programa esté completo, el simulador de micro:bit dará la opción de agitar la placa con el puntero del ratón para reproducir la melodía desde el ordenador, sin necesidad de descargarla en la placa física.

Jack.pngPor otro lado, la imagen del simulador muestra la posibilidad de conectar la tarjeta a un altavoz externo por medio de unas pinzas de cocodrilo y del jack de 3,5 mm del altavoz. Esta es la solución para reproducir sonidos cuando no se dispone de una tarjeta de la versión 2.

Controles de volumen, tempo y tono

Ajustando el volumen y el tempo

La potencia del altavoz de micro:bit no es muy alta, pero puede regularse con el bloque específico establecer volumen a. Por medio de este bloque el nivel sonoro puede ajustarse entre valores de 0 y 255. El ajuste del volumen puede realizarse en cualquier momento de la ejecución del programa. En el caso de la melodía de Fray Santiago, podemos fijar el volumen dentro del evento al iniciar. Además, aprovecharemos este evento para mostrar permanentemente en pantalla una corchea.

Control de volumen.png

De nuevo, tras modificar el programa de Fray Santiago, el simulador de micro:bit nos mostrará cómo conectar la tarjeta a un altavoz externo.Corchea en pantalla.pngAl conectar la placa a un altavoz, puede ser deseable desconectar el altavoz interno. Esta función la realiza el bloque llamado configurar altavoz interno, que puede adoptar los estados activado y desactivado.

Desactivar altavoz.png

La melodía se reproduce por defecto a un tempo de 120 pulsos por minuto. El bloque ajustar tempo a (bpm) admite tempos de entre 40 y 500 pulsos por minuto. Para reproducir Fray Santiago a una velocidad menor que 120 bpm, daremos al tempo un valor de 90 bpm dentro del evento al iniciar.

Ajustar tempo.pngSonidos estocásticos

El bloque tono de timbre (Hz) produce un sonido continuo cuya frecuencia en hertz (Hz) puede ser ajustada. El tono generado por micro:bit no tiene una duración determinada, así que sonará hasta que sea apagado mediante el bloque para todos los sonidos

Usando estos dos bloques podemos programar un generador de notas aleatorias. Para producir números aleatorios se utiliza el bloque escoger al azar de, disponible en el menú Matemática.

Aleatoria.png

De acuerdo con el código presentado, cada vez que se pulse el botón A, la placa generará al azar entre 16 y 32 sonidos, cuyas frecuencias variarán entre 262 Hz y 440 Hz, y que durarán entre 125 ms y 250 ms.