ArduinoなどのSerial通信をMIDIに変換します。Serial MIDIはArduino Unoを使って、センサーを使ったIoTのプログラミングの勉強をする時に使えるアプリだと思います。PCにArduinoをUSBケーブルで接続すると、PCからはシリアルデバイスとして見えます。デバイスマネージャで見ると下のように見えます。
ArduinoからPCへ送るデータを表示したい時、シリアルをモニターができるようなアプリを持ってくるか、Arduino IDEのシリアルモニターを使うのが一般的かと思います。ただ、シリアルのモニターだと二次利用が面倒ではないでしょうか。二次利用とは、例えばデータをブラウザで大きく表示したいとか、平均値を出したいとか。そこで、データをMIDIで送ることを考えます。MIDIならば、データを生値で使うことも、いろんなフリーのアプリがあり扱いに便利です。そこで登場するのかSerial-MIDIを使ってみます。
Serial-MIDIはSpikenzielabs.com のページから手に入ります。下の図を見ると、左からSerial data, Serial MIDI Converter, MIDI software/Hardware となっています。左からSerial ポート(RX/Serial In)から入ってきたデータは、Serial MIDI ConverterによりMIDIに変換されて、ソフトウェアのMIDI-INもしくは、PCのMIDI-OUT につながります。右からソフトウェアのMIDI-OUTもしくは、PCのMIDI-INから来たMIDIデータは、Serial MIDI ConverterによりSerial Dataに変換されてSerial Out(TX/Serial Out)から出力されます。
ダウンロードは、ホームページの下の方、以下の画面に示すところにリンクがあります。application.windows_2.zipがダウンロードできます。このアプリにはJavaが必要ですので、もしインストールしていなけばJavaをjava.comからインストールしてください。
Serial_MIDI_Converter_V2D.exe をダブルクリックしてアプリケーションを起動します。多少起動に時間がかかる気がします。
Press the number key that matches your Arduino's serial Port
Arduinoのシリアルポートの番号を押せ、ということなので”A"もしくは"a"を押します。
Press the letter key that matches your serial port baud rate.
MIDIのボーレート(転送速度)は31250bpsなのですが、このアプリを使う上ではボーレートはどのように設定しても良いようです。Arduinoのスケッチを一番早い115200bpsで作りましたので、"F" もしくは"f"を押します。
Press the number key that matches MIDI INPUT port
MIDI INPUTのポートを選べとのこと。"C"のReal Time Sequencerとは何か?実はわかっていません。別途調べてみたいと思います。私のシステムではloop MIDIが入っているので、loopMIDI Port 1を選びます。”A"もしくは"a"を押します。
Press the number key that matches MIDI OUTPUT port
MIDI OUYPUTのポートを選べとのこと。
Converter is running と表示し、Serial からMIDIへの変換が始まります
Arduino UNO上にドレミファソラシドと音が鳴るプログラムを書きます。
void setup() { Serial.begin(115200); } void loop() { NoteOn(0x3C); delay(500); //C NoteOff(0x3C); delay(500); NoteOn(0x3E); delay(500); //D NoteOff(0x3E); delay(500); NoteOn(0x40); delay(500); //E NoteOff(0x40); delay(500); NoteOn(0x41); delay(500); //F NoteOff(0x41); delay(500); NoteOn(0x43); delay(500); //G NoteOff(0x43); delay(500); NoteOn(0x45); delay(500); //A NoteOff(0x45); delay(500); NoteOn(0x47); delay(500); //B NoteOff(0x47); delay(500); NoteOn(0x48); delay(500); //C NoteOff(0x48); delay(500); } void NoteOn(unsigned char noteno){ Serial.write(0x90); Serial.write(noteno); Serial.write(0x50); } void NoteOff(unsigned char noteno){ Serial.write(0x80); Serial.write(noteno); Serial.write(0x00); }
MIDI OUTPUT の選択で、"A" Gervillを選んだ場合にもJavaのソフトシンセで音が鳴りました。