Icono del sitio AranaCorp

Generación de sonidos con una interfaz MIDI de Arduino

Para generar sonidos sintéticos en el ordenador mediante una interfaz y crear música, es posible transformar un Arduino en un dispositivo MIDI.

Material

Introducción al protocolo MIDI

MIDI (Musical Instrument Digital Interface) es un protocolo de comunicación entre instrumentos electrónicos, controladores y software musical. Consiste en el envío de una serie de bytes (comando y luego datos) a una velocidad de 31250 (baudrate) para especificar el tipo de mensaje (reproducir nota, detener nota, cambiar programa, etc.) y la información asociada (nota reproducida, programa seleccionado, etc.). A continuación, un resumen de los mensajes MIDI.

Código para enviar mensajes MIDI con Arduino

Veremos cómo enviar mensajes MIDI a través del puerto serie. En este ejemplo, enviaremos los comandos de notas sucesivamente. Es como pulsar diferentes teclas en un piano. Para ello, enviamos la siguiente información en un orden específico:

En el protocolo MIDI existe un gran número de mensajes para realizar diferentes acciones como cambiar de instrumento, modular notas, etc.

 int velocity = 100;//velocity of MIDI notes, must be between 0 and 127
 //higher velocity usually makes MIDI instruments louder
 
 int noteON = 144;//144 = 10010000 in binary, note on command
 int noteOFF = 128;//128 = 10000000 in binary, note off command

void setup() {
  Serial.begin(115200);
}

void loop() {
  for (int note=50;note<70;note++) {//from note 50 (D3) to note 69 (A4)
    MIDImessage(noteON, note, velocity);//turn note on
    delay(300);//hold note for 300ms
    MIDImessage(noteOFF, note, velocity);//turn note off
    delay(200);//wait 200ms until triggering next note
  }
}

void MIDImessage(int command, int MIDInote, int MIDIvelocity) {
  Serial.write(command);//send note on or note off command 
  Serial.write(MIDInote);//send pitch data
  Serial.write(MIDIvelocity);//send velocity data
}

Lee este código en el microcontrolador Arduino antes de continuar.

Nota: la velocidad de comunicación MIDI es de 31250. En este ejemplo utilizaremos un convertidor MIDI/Serial. Así que podemos utilizar cualquier velocidad de transmisión.

Configuración de la generación de sonido MIDI con Windows

Configuración de un instrumento MIDI virtual

Para generar sonido, necesitamos un software de síntesis de sonido o un DAW (Digital Audio Workstation). Los DAW pueden ser bastante complicados de usar. Para este tutorial, utilizaremos un sintetizador de sonido virtual muy sencillo: CoolSoft Virtual MIDI Synth.

Para que el software de síntesis funcione, es necesario utilizar un SoundFont para convertir los mensajes MIDI en sonidos procedentes de un piano, por ejemplo. Puedes encontrar una lista de SoundFonts en la página de CoolSoft. Entonces sólo tienes que descargar el archivo .sf2 que quieras y añadirlo en la interfaz de CoolSoft.

Configuración del convertidor de serie a MIDI

La comunicación MIDI es un protocolo particular diferente de la comunicación USB. Para tener en cuenta los mensajes MIDI enviados por el Arduino a través del puerto USB, necesitaremos un conversor de serie a MIDI

Para ello utilizamos el software Hairless Midi to Serial Bridge, que nos permitirá convertir los mensajes serie en mensajes MIDI.

Si activas los mensajes de depuración MIDI, deberías ver un desplazamiento de las notas tocadas y sus velocidades.

Si la salida de audio de tu ordenador está activada, escucharás notas musicales.

N.B.: No podrá cargar código en el Arduino si la casilla Serial <->MIDI Bridge On está marcada.

Ya has creado tu primera interfaz MIDI con Arduino y puedes dar tus primeros pasos en la síntesis de sonido.

Aplicaciones

Fuentes

Salir de la versión móvil