これまでの【MIDIコン・バカ一代】 → 初回|第2回|第3回
それではブレッドボードを使って最終ハンダ付け前のテストをしましょう。前回はワニ口クリップを使った写真で紹介しました、今回は両サイド共にメスのジャンパワイヤを使った配線の写真を掲載します。このジャンパワイヤのメスって肉眼では分かりにくいのですが、スライダ抵抗の端子に対して抜けにくくハマる角度があります。スポスポ抜けちゃうようだったら90度向きを変えて差し込んでみてください。まあそれでも抜けちゃことはあるけどね(笑)
まずは、このファイルをダウンロードしてください。
※ZIPファイルを解凍後、フォルダ内にあるThree_Fader_MIDI_Controller.inoがプログラムファイルになります
このコードをArduino IDEで開いてアップロードするのは前回と同じです。まず今回やっとArduinoで使えるMIDIのライブラリーをインストールします。Arduino IDEの左側の本が棚に並んでいるようなアイコンをクリックすると、「ライブラリーマネージャー」と見えると思います。ここに「MIDIUSB」と入力するとGary Grewal氏が書いてくれたMIDIデータを扱うためのライブラリーが見えますので、それをインストールします。僕の環境では既にインストール済みなので、こんな感じの画面となります。インストールが終わったら、御作法として一度Arduino IDEを終了して再起動してください。
再起動したら、先ほどのプログラムをArduino Pro Microにアップロードします。
少しコードの解説をします。
前回も説明しましたが、/*〜/ や //が冒頭にある行はコメントアウトと言ってプログラムには影響が出ないメモ書きの部分です。
#include <MIDIUSB.h>
ここで以下のプログラムで「MIDIUSB」ライブラリを使いますよ〜と宣言しています。
const int FADER_1_CC = 1;
const int FADER_2_CC = 11
const int FADER_3_CC = 21
ここでそれぞれのフェーダーで何番のCCナンバーを送信するかを決めます。劇伴で毎日使うのは勿論1と11、それからビブラートのデプスに使われることが多い21をアサインしましょうか。ここは皆さんが使っているライブラリーに合わせて設定してください。Panにアサインしたければ10、ボリュームだったら7、ブレスコントロールの代わりに使いたければ2といった感じです。
const int FADER_RAW_MIN = 18; // 測定した最小値
const int FADER_RAW_MAX = 930; // 測定した最大値
ここで前回計測した数値を入力します。ここは最終的な組み込みが済んだ後で再度調整することになると思います。
int lastFaderValue1 = –1;
MIDIの数値は1〜127なので、これはちょっとトリッキーが感じがしますが、フェーダーの最後に送った数値をメモしておくメモ帳みたいなところにわざと書いておいて、前回の最後から数値が動いた時だけ新しい数値を送信するという仕組みです。
const int THRESHOLD = 2;
これが自作コントローラーには重要な1行です。コントローラーを置いているデスクが動いたり、鍵盤を弾いた振動が伝わったりして、コントローラーは絶えず外部からの振動に晒されてるんですね。それから経年劣化でフェーダーが少し動きやすくなったりもしますよね?90年代〜2000年代前半のコントローラーってここのスレッショルドの設定があまくて、故障ではないけど、自分が気が付かないうちに不必要がオートメーションが書かれていた、、、なんてことちょいちょいあったんですよね(涙)最終的な組み込みが終わって、もし誤動作が多いようだったらこの数値をあげてみてください。これは10ビットの1024分の2とか3ですから、そこからまた127に落とし込む事を考えると実作業には影響がないです。ちなみに、const intのintの部分は整数の英語、integerです。ですから、こういう書き方の数値は整数しか入りません。
ちなみに、YouTubeでプログラムの解説をしている方の中に、このintを「イント」と発音してる方が少なからずいますが、intと書いてあっても口語ではインテジャーと発音しちゃいましょう。
void setup() {
// Pro Micro本体のTX/RX LEDを消灯させるおままじない
pinMode(17, INPUT); // RX LED
pinMode(30, INPUT); // TX LED
この行はMIDIコントローラとしての動作には関係ないのですが、実はArduino Pro Microに載っている2つのLEDはマイコンが動作を確認するには便利なのですが意外と明るいんです。それでどんなケースに入れるかにもよるのですが、LEDの光が漏れないようにここで消灯させてしまいます。
if (DEBUG_MODE) {
Serial.print(label);
Serial.print(“: RAW “);
Serial.print(rawValue);
Serial.print(“, CC “);
Serial.print(cc);
Serial.print(“, Val “);
Serial.print(midiValue);
Serial.print(” \t”); // 見やすくするためにタブでスペースを空ける
}
この行はシリアルモニタと呼ばれる行で、先週のキャリブレーション用のコードで使ってコードと同じく、Arduino Pro Microの動作を数値として確認するためのプログラムです。
パーツ同士の接続が正しく、無事に冒頭のプログラムをアップデートできれば、先週も紹介したシリアルモニタに以下のように数値が並びます。
ABC3本のフェーダーのRAWデータつまり10ビットの1024、それをCC〇〇で送り、そのMIDIのValueが80とか、127とか0と見えますね?
この状態で既にDAW側にMIDI CCデータ送信されているはずです。
でも、少しデータが荒いですよね?この動作確認のシリアルモニタを目視しやすいように81行めのdelayの値を100にしているんです。
// シリアルモニタが読みやすいように、少し待機時間を長くする
delay(100);
フェーダーを上下させて、下限が0、上限が127になることを確認できたら、このdelayの値を10にしてみてください。それで1秒間に100回スライダーの位置をチェックするようになります。つまり10ms毎にフェーダーの値を読むということですね。それからケースに組み込んだ後に、
const int THRESHOLD = 2;
の値を1にしてみるのもいいかもしれません。デスクを叩いたり、ケースを少し揺らしてもCCを誤送信しないのがこのスレッショルドの適正値です。5くらいでも実作業には問題ないと思いますよ。実際にCCのオートメーションを書いて耳で判断するのが良いと思います。数値で見ちゃうとできるだけ滑らかにしたくなる気持ちはわかりますが、50〜60のインストトラック全てに2〜4種類のCCのオートメーションを書いていくと、負荷もそれなりに増えますからね。もっとも最近のCPUパワーだったらそれほど神経質にならなくも良いと思いますが、、、この辺をカスタマイズできるのもDIYコントローラーの良いところですからね!
来週はいよいよDIYコントローラー解説の最終回、3Dプリンターで制作したケースに収める解説です!熱溶解積層方式3Dプリンターで、どういう手順でケースを作るかとその注意点を説明しま〜す。
※自身の経験に基づいて記載をしています。パーツ購入/組立てや自作機の利用で生じるいかなるトラブルも責任は負いかねます。実施においては自己責任のことご了承ください。
シリーズ記事【MIDIコン・バカ一代】