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.
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.
- Na aba MIDI Mapper, selecione VirtualMIDISynth como dispositivo padrão do Windows Media Player.
- Na aba Opções, selecione o dispositivo de saída de áudio.
- 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.
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.
- Selecione o Arduino conectado ao seu PC na lista suspensa “Serial Port” (Porta Serial)
- Depois, selecione VirtualMIDISynth na lista suspensa”MIDI Out”.
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.