藤本健のDigital Audio Laboratory
第713回
「IchigoJam」とiPadで演奏してみた。プログラミングが学べる1ボードマイコンで遊ぶ
2017年2月27日 12:53
IchigoJamという小さなコンピュータをご存じだろうか? これはBASICのインタプリタを搭載したプログラム入門用のワンボードマイコン。「こどもパソコン」と銘打たれたIchigoJamは、機能的にMSXを彷彿させる機材で、その昔、8ビットマイコン時代を経験した方なら、すぐ楽しめてしまう機材でもある。価格は自分でハンダ付けするキットなら1,500円、完成品でも2,000円で入手できるという手ごろな機材で、MML(Music Macro Language)を用いて演奏もできてしまう。
筆者も2年前にキットを組み立てて遊んでみたが、先日、IchigoJamの開発者がこれにMIDIを接続してBASICで制御していたビデオを見て気になっていた。そんなことができるのか、実際に試してみた。
低価格でプログラムが学べる「IchigoJam」
ご存じの方もいると思うが、IchigoJamは2014年4月に発売された日本発の小さなコンピュータ。小さくて安いコンピュータとしては、Raspberry Piなどがあるが、Linuxを使っているだけに、初心者にはなかなか手を出しにくいのも事実。筆者自身もLinuxには苦手意識が強く、なかなか活用できていないのが実際のところだ。イギリス発祥のRaspberry Piに対して日本で生み出されたのがIchigoJam。スマートフォンや携帯電話のアプリなどを手掛け、福井県鯖江市に本社があるjig.jp(ジグジェイピー)の福野泰介社長が開発した、子供教育を主目的としたコンピュータだ。
この小さいワンボードコンピュータに、microUSBで電源供給をすると、即BASICが起動してすぐに使えるのは8ビットマイコン時代と同様でとっても快適。その画面はPC用ディスプレイに接続するのではなく、やはりMSXなどと同様、テレビのビデオ端子(コンポジット端子)に接続するというのもユニークなところだ。入力デバイスはPS/2キーボード。最近やや見かけなくなってきたが、自宅に転がっているという人も少なくないだろうし、探せば1,000円もせずに入手できるだろう。
現在のPCと決定的に異なる点は、ソフトウェアは自分で書かなくてはならない、ということ。もちろん人が書いたプログラムを見ながらキーボードを使って打ち込んでいくというのもありだが、正しく入力しなければ、エラーが出て動作しない。それほど複雑なことができるわけではないが、まさにプログラムの勉強には最適という機材なのだ。
筆者はそのIchigoJamの初代機をキットで購入して使ったことがあったが、最新のIchigoJamとは基板や形状が少し変わっているという。またファームウェアもアップデートされて、新しくなっているのだが、そもそもIchigoJamにはインターネットに接続する機能もないので、アップデート自体がちょっと難しい。USBのインターフェイス基板を取り付けて、WindowsやMacでフラッシュメモリーの書き換えをしなくてはならないからだ。今回IchigoJamでMIDIを扱うにあたって、せっかくなので最新版のIchigoJamのキットを組み立てて、それで実験してみることにした。
久しぶりのハンダ付け。学生時代と違い、すっかり老眼で手元が良く見えないのにショックを受けつつ、昔なら15分で完成させられそうなものを1時間かけて、ようやく完成。恐る恐る電源を入れてみたら、なんとか一発で動いてくれた。ちなみにテレビは仕事部屋にないし、画面が大き過ぎて使いづらいので、IchigoJamのサイトで紹介していたUSBビデオキャプチャを購入し、PC用ディスプレイに表示させて使ってみたが、これなら画面キャプチャもできるし、なかなか快適。
プログラムを組んで音を出してみる
まずは、MMLを使ってプログラムしてみると、単音ではあるけれど、演奏することができた。音はオーディオ出力から出るのではなく、IchigoJamのメインチップのSOUND端子とGND端子に圧電ブザーを接続すると、そこから音が鳴るという仕様。2年前に購入した初代IchigoJamではオプション扱いだった圧電ブザーも標準で付属していた。聴いてみるとわかる通り、ちょっぴり音痴なのが残念なところ。ファームウェアのバージョンアップで修正されているのでは……と期待したが、IchigoJamのマニュアルを見ると「画面出力の水平同期信号を使っているため正確な平均律では鳴りません」とある。やはり、ここは諦めるしかなさそうだ。
ここからが今回の本題。福野氏が書いた今年1月のブログで、このIchigoJamをコルグのvolca beatsにMIDI接続して演奏させていた。最初は何をやっているのか、パッと見ではよくわからなかったが、とりあえず、そっくりそのまま真似をしてみることにした。
まず準備するのがMIDIの接続コネクタ。ブログでは、秋葉原の部品ショップなどで60円で販売されている5ピンのDINコネクタをハンダ付けしていたが、ここでは個人的に初めて触るブレッドボードを購入し、これにDINコネクタを設置するとともに、ジャンパー線でIchigoJamと接続してみた。接続先はTxD端子と+5VのVCC端子。IchigoJamにはシリアル信号を送信ができるTxD端子と、受信できるRxD端子が用意されているので、ここではTxD端子を使ってMIDI出力を行なう。
先ほどの福野氏のブログにあったvolca beatsとは、コルグのリズムマシン。ちょうど筆者も同じものを持っているので、福野氏のBASICのプログラムをそのまま入力すれば、同じことが再現できそうだ。
さっそく、ブレッドボード上のMIDI端子とvolca beatsを接続するとともに、このたった9行のプログラムを入力。「RUN」コマンドで実行してみると……、確かにまったく同じことができた。キーボードで数字を適当に押してみると、リズムパターンが変化するのも面白いところ。でも、これは何をしているのだろうか……。この9行をじっくり解析してみた。
まず行番号10では、配列に8つの数字を入れている。volca beatsのMIDIインプリメンテーションを見てみると、下のようになっていて、この中から8つをピックアップしている。
24 (36) : KICK
26 (38) : SNARE
2B (43) : LO TOM
32 (50) : HI TOM
2A (42) : CL HAT
2E (46) : OP HAT
27 (39) : CLAP
4B (75) : CLAVES
43 (67) : AGOGO
31 (49) : CRASH
行番号20の「BPS 31250」というのは、シリアル通信速度のビットレートを設定するためのもの。MIDIは31.25kbpsと定義されているので、この値に設定しているわけだ。S=0と行番号30はいったん置いておき、行番号40~70で8回ループする設定がされている。問題となるのは行番号50だろう。このままだとわかりにくいが、これは、以下のものと同義だ。
PRINT CHR$(#99,[RND(10)],1);
つまり、キャラクタコードを指定する形で3つの文字をプリントしている。一つ目は16進数の99、2つ目は行番号10で設定した配列のうちのどれかをランダムで選び、3つ目は1となっている。でも、画面に文字を表示するのと、MIDIにどういう関係があるのだろうか?
実はIchigoJamでは画面への文字表示と同時に、シリアル端子にも同じ情報を送るようになっていたのだ。そして実はこれ、MIDIのNOTE ON(音を出す)信号そのものだ。ここでMIDIの仕様の詳細の解説は割愛するがMIDI NOTE ONは、以下の3バイトと定義されている。
9Xh(X=チャンネル:0-15)
ノート番号(0-127)
ベロシティ(0-127)
先ほどのプログラムでは#99となっているからMIDI 10chに対して、NOTE番号とベロシティ値1を送っているわけだ。行番号60は1つの音符の長さを指定するもの。マニュアルによるとWAIT 60で約1秒の待ち時間とのことだから1/6秒程度。1つの音を16分音符と捉えれば、テンポ90というところか。
ここでちょっと不思議に思ったのが、なぜRND関数を使って乱数で音を鳴らしているのに、固定のリズムパターンで鳴るのか、という点。実は行番号30のSRND関数で数値を設定して初期化すると、同じ数値なら、その後のRND関数で発生する乱数は必ず同じ順番で出てくるようになるからなのだ。そして、行番号80で入力される数値で初期化すれば、別のパターンが発生するというわけである。たった9行で、ここまでのことを考えているのは天才じゃないかと思ってしまった。すごく面白い。
iPadで自動演奏のプログラムを組んでみた
次は、自分でも簡単な自動演奏をするプログラムを組んでみようとMIDIの出力先に別の音源を接続してみた。ここではiPadを音源にし、iPad側のMIDIインターフェイスとして、IK MultimediaのiRig MIDIを用意。アプリは何でもよかったが、ここではローランドのSound Canvas for iOSを使ってみた。このセットをvolca beatsの代わりに接続している。
先ほどの福野氏のプログラムを参考にしつつ、MIDIチャンネル1でドレミファソラシドと鳴らすプログラムを単純に組んだ上で、試しに実行してみたところ、あっさりうまく鳴ってくれた。が、演奏し終えると、関係ない低い音がドーンと鳴る。試しに、プログラムをリスト表示してみたら、さらに「ジャラーン」と妙な音がするのだ。なぜだろうと思っていたら、前述の通り、画面への文字表示とシリアルポートへの出力がリンクしているため、変なことが起こってしまっていたわけだ。
調べてみると、シリアルポートへの出力を止めることができるUARTというコマンドがあった。つまり、プログラムをスタートする時点でこれをオンにし、プログラム終了と同時にオフにすれば、問題は解決するはず。実際、これでこれがうまくいったので、続いて簡単に単音の曲をプログラミングしてみた。実行してみたのがこのビデオだ。プログラムの詳細については省くが、この曲は4分音符と2分音符の2種類で構成され、そのほとんどが4分音符。いちいち音長さをデータとして記述すると、面倒なので、2分音符の場合は、ノート番号に100を足した値にし、プログラムの条件処理で、これを2分音符扱いするようにしてみたのだ。
さらに複雑な曲データを入力するのも、力技でなんとかなりそうではある。しかし、今の時代に、MIDIの信号を直接入力して制御することができるというのは、なかなか面白かった。個人的には30年前にそんなことをしていたので、とっても懐かしい思いでもあった。MIDI検定などを受けている人には、このMIDIの原始的な部分を体験してもらいたい。たまにはこんなレトロな世界を楽しんでみてはいかがだろうか?