ハードウェア
リアルなサウンド!IchigoJamとMIDI音源でドラムマシーン
shimizu
今回は、IchigoJamでハードウェア音源モジュールを制御して、リアルなサウンドを鳴らしてみます。
電子楽器が演奏データを通信するための「MIDI」という規格がありますが、物理的にはシリアル通信が用いられており、IchigoJamからデータを送信することで楽器を鳴らすことができます。本当に制御できるのかどうか、実際に試してみましょう。
参考にした記事
150円でつなぐ!MIDI音源で音楽あそび – Roland SC-88 Pro x IchigoJam
IchigoJamの開発者である福野さんが投稿されているこちらの記事を参考にしてみました。この記事ではケーブルを使用してIchigoJamからMIDI端子を取り出していますが、IchigoJamにかぶせる形のMIDIインターフェース基板を入手して使用しました。
用意するもの
- IchigoJam
- MIDIインターフェース基板(こちらのパーツを用意しましたが、2017/1/31現在は販売されていないようなので、参考記事を元に自作してみてください)
- MIDIケーブル(IchigoJamにMIDIプラグを取り付けた場合は不要)
- MIDI音源モジュール(今回はローランド SC-55ST)
MIDI音源モジュールには、MIDI入力端子を備えた(PC用ではなくて楽器の方の)キーボードも利用できます。または、ローランドのGS音源モジュールがiOSアプリとして復活したSound Canvas for iOSをLightning用MIDIインターフェイスと組み合わせて使うという手もありますね(参考記事)。
試してみた
IchigoJamにMIDIインターフェース基板を取り付け、OUT側のコネクタとMIDI音源の「MIDI IN」をケーブルで接続します。MIDI音源に入力モードの切り替えスイッチがある場合は、MIDI INへの入力を受け付けるようセットしましょう(ローランドやヤマハの場合、「MIDI」を選択する)。
それでは試しに以下を実行して、音を鳴らしてみましょう。ピアノの音色で「ド」の音がなるはずです。
BPS 31250 UART 1:PRINT CHR$(#90,60,127);:UART 0
MIDIの規格(参考)では、通信速度は31,250bpsと決められていますので、最初に「BPS 31250」を実行して設定します。そして「UART 1」で、画面上にPRINTした内容をシリアル通信でも出力するようになります。ちなみにIchgoJamのシリアル出力は非常に特徴的で、回線をファイルとして開くのではなく、画面に表示した内容がシリアルにも出力されるという方式を取っています。
次のPRINTでは、MIDI信号を出力しています。「#90」は「チャンネル1で鍵盤を押す」という命令、以降はパラメータで「60」は音階(ド)、「127」は「鍵盤を押す強さ」を表します。
これで音がなったわけですが、このままではこの後PRINTする度に表示した文字がそのままMIDI音源に送られてしまい、勝手に音がなってしまうので、最後に「UART 0」を実行してシリアル通信での出力を止めます。
音を鳴らす方法が分かりましたので、これを踏まえて、同じく福野さんが作られたリズムマシーンを改造し、MIDI音源でリアルなサウンドが鳴るドラムマシーンを作ってみました。
実行すると、左から右へ順番にループ再生されます。十字キーでカーソルを動かしてマスを選んでスペースキーを押すと、そのマスがONになり、タイミングが来ると音が鳴ります。縦の列にはシンバルやドラムなど、それぞれ異なる楽器が割り当てられています。
動作している様子を動画で見るにはこちら。
5 'ドラムマシーン 10 BPS 31250:UART0:CLS:CLV:CLT 15 LET[0],39,46,42,51,38,36,35 20 LC 5+I%8*3,2+I/8*3:PRINT "-":I=I+1:IF I<8*7 GOTO 20 25 LC 5+X*3,1+Y*3:PRINT "v" 30 K=INKEY():GOSUB 100:IF K=0 GOTO 30 32 IF K=SPACE GOSUB 70:GOTO 30 35 LC 5+X*3,1+Y*3:PRINT " " 40 X=(X+(K=RIGHT)-(K=LEFT)+8)%8 50 Y=(Y+(K=DOWN)-(K=UP)+7)%7 60 GOTO 25 70 LC 5+X*3,2+Y*3 80 IF SCR(5+X*3,2+Y*3)=1 PRINT "-":RETURN 85 PRINT CHR$(1):RETURN 100 IF TICK()<T*15 RETURN 110 LC 5+T%8*3,21:PRINT " " 120 T=T+1:LC 5+T%8*3,21:PRINT CHR$(5) 130 FOR I=0 TO 6 140 IF SCR(5+T%8*3,2+I*3)!=#2D LC0,-1:UART1:?CHR$(#99,[I],96);:UART0 150 NEXT 160 RETURN
100行目「IF TICK()<T*15 RETURN」の「15」の値を変えるとテンポが変わります。
また、15行目「LET[0],39,46,42,51,38,36,35」の各数値を変えるとパーカッションの種類が変わります(番号についてはこちらを参照してください)。
ドラムセット以外の音色も加えてみたりすると楽しそうですね。
色々と改造してみてください。