fbpixel
Etiquetas: ,

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

  • Ordenador
  • Arduino con puerto USB

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.

protocol-midi-message-structure Generación de sonidos con una interfaz MIDI de Arduino

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:

  • El comando noteOn o Off reproduce la nota o la detiene
  • la nota tocada o el tono
  • la velocidad a la que se pulsa la tecla

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.

  • Descargue e instale el software de CoolSoft
coolsoft-virtualmidisynth Generación de sonidos con una interfaz MIDI de Arduino
  • En la pestaña MIDI Mapper, seleccione VirtualMIDISynth en el dispositivo por defecto del Windows Media Player
coolsoft-virtualmidisynth-mapper Generación de sonidos con una interfaz MIDI de Arduino
  • En la pestaña Opciones, seleccione el dispositivo de salida de audio
coolsoft-virtualmidisynth-options Generación de sonidos con una interfaz MIDI de Arduino
  • Pulse «Aplicar».

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.

coolsoft-virtualmidisynth-soundfonts Generación de sonidos con una interfaz MIDI de Arduino

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.

  • Descargue y abra el software Hairless
hairless-midi-serial-converter Generación de sonidos con una interfaz MIDI de Arduino
  • Seleccione el Arduino que ha conectado a su PC en la lista desplegable «Serial Port».
  • A continuación, seleccione VirtualMIDISynth en la lista desplegable «MIDI Out».
hairless-midi-serial-converter-converting Generación de sonidos con una interfaz MIDI de Arduino

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

  • Crea un controlador MIDI con Arduino, botones y potenciómetros.

Fuentes