2012年1月28日土曜日

MIDI Library for Arduino 1.0


Arduino でMIDI を扱うネタはこれまで何度か紹介しています。
今回は Arduino IDE 1.0 でMIDI ライブラリを使う方法を紹介します。
回路はこちらのシールドを使用します。

MIDI 送信は標準のサンプルがあります。
File > Examples > 4.Communication > MIDI

以前のサンプルと異なり、
Serial.print(val,BYTE);
ではなく、
Serial.write(val);
を使っています。
BYTE を指定する書き方は、Arduino 1.0 IDE ではエラーになるので、以前の書き方で作ったスケッチは修正する必要があります。


受信には、MIDI メッセージのパースが必要なので、ライブラリを使います。
MIDI のライブラリは Arduino Playground で紹介されている Arduino MIDI Library と、以前紹介した Tymm's MIDI Library などがあります。
Playground の MIDI Library v3.1 はまだ1.0 対応していないようです(簡単な修正で使えます)。

Tymm's MIDILibrary は1.0 テスト版があるので、こちら紹介します。

サンプルコードは MidiSendExample、MidiReceiveExample、MidiPneumaticsExample があります。
(Pneumatics は内容が良くわかりません。)

MidiReceiveExample を使ってみましょう。
MIDI の送信は iOS アプリとMIDI アダプタを使って、iPod Touch から行ないます。

このサンプルは Note On メッセージで LED On、Note Off でLED Off という簡単なものです。
これは、MIDI 対応 鍵盤アプリを使って簡単に試す事が出来ます。(例えば bs-16i など)。



次に、MIDI スライダーを使って、LED の明るさをコントロールしてみましょう。
スライダーが使える iOS アプリの Touch OSC または、MIDI Monitor などを使います。


MIDI Monitor の Mixed Control では CC #11 からCC #16 がスライダーに割り当てられています。


Touch OSC の Simple Layout はCC #0からCC #3 が スライダー(縦)に割り当てられています。


CC (ControlChange) メッセージ を受け取るには、handleNoteOn, handleNoteOff などにつづいて、handleControlChange を実装します。
(コメントアウトされた状態で用意されています。)


例えば
void handleControlChange(unsigned int channel, unsigned int controller, unsigned int value){
if (controller==0 || controller==11){
analogWrite(3, map(value,0,127,0,255));
}
if (controller==1 || controller==12){
analogWrite(5, map(value,0,127,0,255));
}
if (controller==2 || controller==13){
analogWrite(6, map(value,0,127,0,255));
}

}

この例では、CC #0 またはCC #11 で 3番ピンを、CC #1 または CC#12 で 5番ピンを、 CC #2 または CC #13 で6番ピンを、それぞれ PWM 制御しています。
PWM の使えるピンは 3,5,6,9,10,11 の6本なので、これらのピンを使ってRGB 制御をすることができます。(→こちらの記事参照)
MIDI で送るデータは、0から127 の128 段階なので、map 関数で0から255 に範囲を変えています。(128段階なのは変わりません)

Note On/Off や ControlChange 以外のMIDI メッセージもこのライブラリで扱う事が出来ます。
何を何に割り当てるかは自分で自由に決められるので 本来のMIDI の枠に捕われずに使って良いと思います。



1 件のコメント:

  1. Sega Genesis Classics - Airjordan's 14Retro
    Sega Genesis Classics is a compilation of over 50 bestest jordan 18 white royal blue classic titles new air jordan 18 retro racer blue from good jordan 18 white royal blue the golden era good air jordan 18 retro red suede of Sega. It includes over 50 titles, including good air jordan 18 retro red suede Sonic the Hedgehog,

    返信削除