Objetivos
Material requerido.
Esta sesión acepta cualquier otro modelo de Arduino. |
|
Un cable USB adecuado al conector de tu Arduino. | |
Un PC con el entorno de trabajo MIDI correctamente instalado y configurado. |
PUESTA EN MARCHA
En esta sesión vamos a generar mensajes directamente con Arduino, sin necesidad de un teclado, y los enviaremos a un sintetizador para empezar a generar sonidos. En concreto vamos a generar los mensajes necesarios para tocar y silenciar una nota, que son los que conocemos.
Por lo tanto, necesitaremos tener arrancado Hairless, Loop Midi en el caso de Windows y de que utilicemos un sintetizador virtual, y dicho sintetizador.
Cuando arranquemos Hairless tendremos que seleccionar en el MIDI OUT el sintetizador que vayamos a usar o el puerto MIDI virtual al que está conectado, y en la pestaña “Serial Port” escogeremos nuestro Arduino.
Además marcaremos la casilla “Debug MIDI Messages” para poder leer los mensajes que vayamos enviando.
Es muy importante fijarse si está activada o no la opción “Serial<->MIDI Bridge On”. Mientras esté activada, Arduino estará conectado al MIDI IN y MIDI OUT, pero no podremos cargarle programas. Así que recordad que cada vez que le subamos un sketch, hay que desactivar esta casilla.
GENERAR NOTAS ALEATORIAS
Ahora que ya hemos preparado todo lo necesario, arrancamos el IDE de Arduino para empezar a programar. Recordad que vamos a utilizar la librería Arduino Midi Library y que tenéis que tenerla correctamente instalada.
Lo primero que haremos será incluir la librería y crear una instancia MIDI. Además crearemos una variable nota, donde guardaremos los valores que generemos aleatoriamente.
#include <MIDI.h> MIDI_CREATE_DEFAULT_INSTANCE(); int nota;
En el setup tendremos que llamar a la función MIDI.begin(). Está función establece la velocidad de transmisión a 31.250 baudios que es la que utiliza el MIDI, así que si vamos a conectarlo al PC deberemos cambiar esa velocidad.
void setup() { MIDI.begin(); Serial.begin(115200); //Cambiamos la velocidad del puerto serie }
Hemos escogido esta velocidad porque es la que viene por defecto en Hairless, pero si queréis cambiarla podéis hacerlo en «File->Preferences->Baud rate».
Las funciones que se utilizan para enviar los mensajes Note On y Note Off son muy sencillas, y simplemente les pasamos como parámetros la nota, la velocidad y el canal (que nos deberían sonar de la sesión anterior).
MIDI.sendNoteOn(note, velocity, channel); MIDI.sendNoteOff(note, velocity, channel);
Así que para tocar simplemente una nota aleatoria, el programa sería tan sencillo como este:
void loop() { nota = random(36, 96); //Selecciona la nota de forma aleatoria MIDI.sendNoteOn(nota, 127, 1); //Genera la nota delay (500); MIDI.sendNoteOff(nota, 127, 1); //Silencia la nota delay (500); }
Podéis descargar el programa aquí: Notas_aleatorias.
Si miramos la pantalla de Hairless veremos los mensajes que se están enviando, y como cada vez que Arduino envía un mensaje o lo recibe el sintetizador se enciende una luz verde.
TOCANDO UNA ESCALA
Para tocar una escala crearemos un array con las notas que lo componen y lo iremos recorriendo cada vez que se ejecute el loop utilizando un ciclo for.
int numNotas=9; int notas[ ] = {60, 62, 64, 65, 67, 69, 71, 72}; //Declaramos las notas de la escala
Y en el loop simplemente iremos generando y silenciando las notas recorriendo el array en un ciclo for:
void loop() { for (int i=0 ; i<numNotas ; i++) { MIDI.sendNoteOn(notas[i],127,1); delay (500); MIDI.sendNoteOff(notas[i],127,1); } delay (1000); }
Aquí os dejamos el programa completo: Genera_Escala.
Y con esto que hemos aprendido seguro que se os ocurren muchas cosillas para ir jugando un poco, e incluso con un poco de paciencia (o mucha) podríamos hacer que nuestro Arduino toque alguna canción sencillita.
Resumen de la sesión
En esta sesión hemos aprendido varias cosas importantes: