Roland JD-Xiでサスティンペダルを使うメモ


先月、ローランドのシンセサイザー JD-Xiを購入しました。なんていうか、「色んなテクノ機材が1台に凝縮」されたような感じのやつです。

ミニ鍵盤搭載で、TR-808みたいな16個のボタンを備えたシーケンサー機能があって、モノフォニックのアナログシンセが1つついてて、あとボコーダーなんかが使えるっていう、小型で比較的低価格にも関わらず、多数の機能を備えているのが特徴です。テクノとかダンスとかそっちに特化したものなんで、他のジャンルに使うのはちょっと難しいけど。

とにかくいいやつ。けど欠点もある・・・

そんなJD-Xiですが、こいつにはサスティンペダル用の端子はありません。しかし、MIDI INに別のMIDIキーボードなんかを接続してペダルを踏んで弾くとちゃんと効果がかかります。この時、効果がかかるのは外部のMIDIキーボードで弾いたものだけで、内蔵のミニ鍵盤を弾いてもサスティンペダルの効果が出ません。

そこで思いついたのです。「ローカルスイッチをOFFにして、MIDI OUTの信号をMIDI INに流しつつ、CC64のホールドを送ってやれば、内臓の鍵盤でもサスティンペダルが使えるのでは?」と。

つくってみた

こういうハードウェアが欲しい!っていう要望に個人でかつ少ない知識と技術で応えられるものといえばやっぱりArduino。MIDIは31.25kbpsの非同期シリアル(UART)ですから、もちろんArduinoで扱うことができます。また、MIDI用のライブラリも用意されているので、関数を呼び出すだけでノートオン・ノートオフやコントロールチェンジを送信することができて、「変わった形の楽器」を作ることだって簡単にできちゃうかもしれません。

スケッチはあまり参考にしないで・・・

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();
int val=0;

//フォトカプラとかを使ってマイコンにMIDIを接続する方法なんかは他のサイトが詳しいのでそっちで
//正直、「よくわからないけどこの回路で通信できる」程度の認識しかないので・・・
void setup()
{
 MIDI.begin();
 pinMode(2,INPUT_PULLUP);//サスティンペダルを繋ぐピン もう片方はGNDへ
}

void loop()
{
 int newval=digitalRead(2);
 if(val!=newval){
 val=newval;
 //値の計算式はペダルの仕様(極性?)によって違う
 //ローランド製のもののように、踏むとOFF、離すとONというものなら次の通り
 //if文でHIGHのときCC64を127にして、LOWのとき0にする、みたいな記述の仕方の方がわかりやすいかも
 //※このスケッチは簡易的なもので、CH1にしか送信しないので、サスティンペダルはCH1でのみ有効ということになります
 MIDI.sendControlChange(64,val*127,1);
 }
 //このMIDIライブラリでは、標準の設定でソフトスルーがONになっているので、
 //read()を呼び出してあげるだけでRxから入ったMIDIメッセージがTxに流される
 MIDI.read();
}

とても参考になりました

使用したライブラリ

ハードウェアのほう

まず最初にブレッドボードとArduino UNOで作って、それから普通のユニバーサル基板に移しました。

ケチなので、DINプラグとフォトカプラ以外は手元に余っていたものを使いました。あと、Arduino UNOは他のことに使いたいので、マイコンと水晶発振器のみを備えたArduino互換基板的な感じにしました。そういえばMIDIって内蔵発振でも使えるのかな?

CieAvosVEAA6pXL

これでペダルが使えるぞ!!

といってもピアノ系の音色は少ないし、合成してどうにかなる感じでもないので、使いみちは限られそうだ・・・

コメントを残す

メールアドレスが公開されることはありません。