Arduino UnoのUSB-MIDIデバイス化については別ページで書きましたが、ここではArduino MicroをUSB-MIDIデバイス化する方法を記載します。UnoのUSB-MIDI化よりも簡単です。この方法は、Arduino Micro 以外でもこの表に示したArduinoであれば使えるはずです。(全部試したわけではありません。)
Arduinoのライブラリを使います。Arduino をUSB-MIDI化するライブラリは2種類あります。微妙に違う2種類です。
Arduino IDEのライブラリを「インストール」のメニューから「ライブラリを管理」を選びます。
検索ボックスに、USBと記入しエンターを検索すると、表示されるライブラリの中にMIDIUSBがあります。インストールボタンを押すとライブラリがインストールできます。
その後、「閉じる」ボタンを押します。
ライブラリがインストールできているかどうかは、「ファイル」メニューから「スケッチ例」を選ぶと、その一番下にMIDIUSBのスケッチが入っています。
ここではMIDIUSB_loopを選びます。
もう一つのUSBMIDIをインストールするには、上と同様、「インストール」のメニューから「ライブラリを管理」を選びます。検索ボックスに、MIDIと入力して検索します。USBMIDIが表示されますので、インストールは上と同様です。
「ファイル」メニューから「スケッチ例」を選ぶと、その一番下にUSBMIDIのスケッチが入っています。
2つのライブラリをインストールする必要はありません。どちらかで良いのですが、ここでは2つインストールしてみました。結果、フォルダーArduino/librariesの下に2つのフォルダーができています。
このプログラムはArduinoがMIDIメッセージを受信し、そのまま同じメッセージを送信します。(送り返します。)プログラムを見てみると、プログラムの先頭でMIDIUSB.hがインクルードされています。このヘッダーの中で、MIDI送受信のクラス、MidiUSBのインスタンスが作られていますので、setup()の中では何もやらなくても大丈夫です。
#include "MIDIUSB.h"
MIDIは、構造体midiEventPacket_tでやり取りします。この構造体は、MIDIUSB_Defs.hに定義されています。
typedef struct { uint8_t header; uint8_t byte1; uint8_t byte2; uint8_t byte3; } midiEventPacket_t;
MidiUSB.read()でMIDIを取り込み、rxに実態が入ります。もし、MIDIを受信していなければ、rx=0 となります。MIDIが受信できれば、MIDIデータをMidiUSB.sendMIDI(rx)で出力します。
void loop() { midiEventPacket_t rx; do { rx = MidiUSB.read(); if (rx.header != 0) { //send back the received MIDI command MidiUSB.sendMIDI(rx); MidiUSB.flush(); } } while (rx.header != 0); }
Arduino Microを用意します。USBケーブルでPCとArduino Microがつながっています。MIDIUSB_loopをArduino Microに書き込みます。書き込んだ後にリセットがかかり、Arduino MicroはUSB MIDIデバイスになります。
Chrome でSend And Receive MIDIを開いてみてみると、Input Device, Output DeviceにArduino Microが表示されています。Output MIDIの欄に適当なMIDIメッセージを記入し、Send ボタンを押すと、Inout Monitorの欄にArduino Microから戻ってきたMIDIメッセージが表示されます。