GENERAR MENSAJES MIDI

Objetivos

 

  • Poner en marcha Hairless correctamente.
  • Empezar a trabajar con la librería MIDI que vamos a usar.
  • Generar mensajes MIDI con Arduino para tocar notas.
  •  

    Material requerido.

     ArduinoUNO

    Arduino Uno o similar

    Esta sesión acepta cualquier otro modelo de Arduino.

     CableUSB Un cable USB adecuado al conector de tu Arduino.
     PC 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.

    hairless enviar notas

     

    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);
       }
    

     

  • Hemos elegido las notas de la 36 a la 96 porque son las que suelen tener los teclados normales de 5 octavas (5 escalas completas), como el que tenemos descargado.
  • Cuando utilizamos la librería, los canales van del 1 al 16, igual que en los dispositivos que utilizan los músicos.
  • 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.

    ver mensajes notas aleatorias

     

    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
    

     

  • Hemos elegido las notas de la 36 a la 96 porque son las que suelen tener los teclados normales de 5 octavas (5 escalas completas), como el que tenemos descargado.
  • Cuando utilizamos la librería, los canales van del 1 al 16, igual que en los dispositivos que utilizan los músicos.
  • 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.

    ver mensajes midi

    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:

     

  • A poner en marcha Hairless.
  • La librería que utilizamos nos va a facilitar mucho la programación.
  • Hemos generado nuestros primeros mensajes MIDI.
  • Por fin hemos hecho un poco de ruido.
  • Deja una respuesta