fbpixel
Etiquetas: ,

Para gerar sons sintéticos e criar música usando uma interface no seu computador, é possível transformar o Arduino num dispositivo MIDI.

Material

  • Computador
  • Arduino com entrada USB

Introdução ao protocolo MIDI

O MIDI (Musical Instrument Digital Interface) é um protocolo de comunicação entre instrumentos eletrônicos, controladores e software de música. Ele consiste em enviar uma série de bytes (comando e depois dados) a uma velocidade (baudrate) de 31250 para especificar o tipo de mensagem (tocar nota, parar nota, mudar de programa, etc.) e as informações associadas (nota tocada, programa selecionado, etc.). Veja aqui um resumo das mensagens MIDI.

protocol-midi-message-structure Gerar sons com uma interface MIDI Arduino

Código para enviar mensagens MIDI com o Arduino

Veremos como enviar mensagens MIDI através da porta serial. Neste exemplo, enviaremos sucessivos comandos de notas como se apertássemos as teclas de um piano. Para tal, enviamos as seguintes informações, nesta ordem::

  • Comando noteOn ou Off para tocar a nota ou pará-la
  • a nota tocada ou o tom
  • a velocidade com a qual a tecla é pressionada

No protocolo MIDI, há um grande número de mensagens para realizar diferentes ações, como mudar 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
}

Carregue o código acima no microcontrolador Arduino antes de prosseguir.

Obs: a velocidade da comunicação MIDI é de 31250. Neste exemplo, utilizaremos um conversor MIDI / Serial. Com isso poderemos utilizar qualquer baudrate.

Configuração da geração de som MIDI com o Windows

Configurar um instrumento MIDI virtual

Para gerar som, precisamos de um software de síntese sonora ou de uma DAW (Digital Audio Workstation). As DAWs podem ser um pouco complicadas de utilizar. Neste tutorial, usaremos um sintetizador de som virtual muito simples, o CoolSoft Virtual MIDI Synth.

  • Faça o download do software CoolSoft e instale-o.
coolsoft-virtualmidisynth Gerar sons com uma interface MIDI Arduino
  • Na aba MIDI Mapper, selecione VirtualMIDISynth como dispositivo padrão do Windows Media Player.
coolsoft-virtualmidisynth-mapper Gerar sons com uma interface MIDI Arduino
  • Na aba Opções, selecione o dispositivo de saída de áudio.
coolsoft-virtualmidisynth-options Gerar sons com uma interface MIDI Arduino
  • Clique em “Aplicar”.

Para que o software de síntese funcione, é necessário utilizar uma base de som (SoundFont) para converter as mensagens MIDI em sons vindos de um piano, por exemplo. Há uma lista de SoundFonts disponível na página CoolSoft. Em seguida, basta fazer o download do arquivo .sf2 desejado e adicioná-lo na interface CoolSoft.

coolsoft-virtualmidisynth-soundfonts Gerar sons com uma interface MIDI Arduino

Configuração do conversor Serial / MIDI

A comunicação MIDI é um protocolo específico diferente da comunicação USB. Para que as mensagens MIDI enviadas pelo Arduino via USB sejam levadas em conta, é necessário um conversor Serial / MIDI

Para tal, usamos o software Hairless Midi to Serial Bridge, que permite converter mensagens seriais em mensagens MIDI.

  • Faça o download do software Hairless e abra-o.
hairless-midi-serial-converter Gerar sons com uma interface MIDI Arduino
  • Selecione o Arduino conectado ao seu PC na lista suspensa “Serial Port” (Porta Serial)
  • Depois, selecione VirtualMIDISynth na lista suspensa”MIDI Out”.
hairless-midi-serial-converter-converting Gerar sons com uma interface MIDI Arduino

Se ativar o Debug MIDI messages, poderá ver rolarem as notas tocadas e as suas velocidades .

Se a saída de áudio do seu computador estiver ligada, ouvirá as notas musicais.

Obs: Não é possível carregar o código para o Arduino se a opção Serial <->MIDI Bridge On estiver selecionada.

Depois de criar a sua primeira interface MIDI com o Arduino, já pode dar os seus primeiros passos na síntese sonora.

Aplicações

  • Criar um controlador MIDI com o Arduino, botões e potenciômetros.

Fontes