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.
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
- En la pestaña MIDI Mapper, seleccione VirtualMIDISynth en el dispositivo por defecto del Windows Media Player
- En la pestaña Opciones, seleccione el dispositivo de salida de audio
- 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.
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
- 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».
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.