2013/06/02

プチコンでMIDIコントローラを作る(1)

プチコンを使ってDSをMIDIコントローラにしようとしています。(ハードの改造なしで。)
とりあえずプチコン上のUIはこんな感じ。


下画面タッチで操作します。部品は3種類あります。
  • トグルボタン: 押すたびにON/OFFが切り替わる。 
  • 枠の付いたボタン: 押したらON、離したらOFF。 
  • スライダ: 上下に動かして値を任意に変更。 
とりあえず部品の数や配置はDATA文でハードコーディングですが、ファイルに記録できるようにして、メニューからLOAD/SAVEできるようにする予定です。

ていうかDSからどうやってMIDI信号を出すの?

DSから直接MIDI信号を出すのは無理なので、DSのオーディオ出力をPCのライン入力に入れて、オーディオ信号によるシリアル通信でデータを送り、後はPC側のソフトで何とかします。(PC上で仮想MIDIデバイスとして動作させます。)
オーディオ信号を使うので、ちょうどアナログモデムと似たようなものです。もっともオーディオ出力は一方通行だしプチコンの能力も限られているので、簡素化した独自のプロトコルを使うことにします。どうせPC側で変換するので、送るのはMIDIメッセージそのものである必要はありません。必要最低限の情報だけを送って、PC側で適当にマッピングします。
基本的には、信号の波形をBGMPRGで定義してMMLでその音を再生すれば、任意の波形の信号を送ることができます。が、オーディオインターフェースを経由するわけなので、少なくともDC成分は除去されてしまいます。それに、VSYNCを使っても微妙にタイミングがずれてしまうので、なかなか思ったような波形を出すのは難しいです。

実験の結果、とりあえずこんな感じにしてみました。1個のコマンドは14ビット固定長で、パリティとかは何もなし。それを2相PSKでエンコードし、無音部分を長めにとって区切りとし、最大60個/秒ぐらいのレートで送ります。この波形は実際にPCでキャプチャしたものですが、デコード処理はまだ実装してないので、ちゃんと受け取れるかどうかは分かりません。。

0 件のコメント: