なぜ自作するのか
VDMXで使ういい感じのMIDIコントローラーがないので自作することにした。
最近MIDIコンを自作するVJが多い、流行ってるんか?
欲しい機能は
- 単純なボタンが碁盤状に並んでいること
- 無限に回るツマミがほしい
VDMXって何?
スクリーンに自由自在に映像プレゼンテーションするためのアプリ
例えば結婚式や、DJやライブの音楽イベント、学園祭で映像の演出をするのに使われるアプリ
MIDIコン自作の情報
ともかく情報収集
ロータリーエンコーダ
無限にクルクル回るツマミを作るための部品
内部プルアップ抵抗
USB MIDI
Keypad
USB機器を作るにはleonardoを使う
MIDIコンのようなUSB機器を作るには、Arduinoはunoではなくleonardoを使う。その方が手間が少ない。
Arduino unoは2つチップを搭載していて、USBに使われてる方のチップのファームウェアを書き換える必要があるが、leonardoなら1チップなのでファームウェア書き換えが不要。
材料
- Arduino leonardo
- ロータリーエンコーダー
- 押しボタンスイッチ
材料をつなぐ
やりたいことはいろいろあるが、まずは調べた情報通りに作ってみる
押しボタンスイッチはGNDと4につなぐ
エンコーダーのAを5, Bを6に, CをGNDにつなぐ
ひらってきたArduinoコード
まずArduino IDEでこのライブラリを追加
ひらってきたコードをIDEにコピペ
そしてArduinoに書き込む
#include <TimerOne.h>
#include <Encoder.h>
#include <USB-MIDI.h>
USBMIDI_CREATE_DEFAULT_INSTANCE();
#define OFF 0
#define ON 1
#define SW_PIN 4
#define ENC_PIN1 5
#define ENC_PIN2 6
Encoder myEnc(ENC_PIN1, ENC_PIN2);
volatile long oldPosition = -999;
volatile long newPosition = 0;
int TOGGLE = OFF;
void RotEnc() {
newPosition = myEnc.read();
}
void setup() {
pinMode( SW_PIN, INPUT_PULLUP);
pinMode(ENC_PIN1, INPUT_PULLUP);
pinMode(ENC_PIN2, INPUT_PULLUP);
MIDI.begin(10);
Timer1.initialize(500); //500μs(マイクロ秒)で設定
Timer1.attachInterrupt(RotEnc);
}
void loop() {
if(digitalRead( SW_PIN ) == HIGH && TOGGLE == ON ){
TOGGLE = OFF;
MIDI.sendNoteOn(36, 100, 10);
}else if(digitalRead( SW_PIN ) == LOW && TOGGLE == OFF ){
TOGGLE = ON;
MIDI.sendNoteOff(36, 0, 10);
}
if (newPosition > oldPosition) {
oldPosition = newPosition;
MIDI.sendNrpnIncrement(67, 1);
}else if(newPosition < oldPosition ){
oldPosition = newPosition;
MIDI.sendNrpnIncrement(61, 1);
}
}
VDMXでMIDIコンを設定する
さっそく作ったMIDIコンをVDMXで使えるように設定する
設定のやり方はこちら
とりあえず上の要領で設定したら、ロータリーエンコーダー(無限に回るツマミ)の設定を変える
ロータリーエンコーダーをアサインしたUIを選択して、UI InspectorでEndless MIDI Modeで64-0/65-127を選択する