藤本健のDigital Audio Laboratory
第714回

1,500円のキット「PanCake」を、IchigoJamと組み合わせて音を鳴らす
2017年3月6日 11:16
前回の記事では、日本製で1,500円というワンボードコンピュータ「IchigoJam」を使ってMIDIを制御する実験をしてみた。その関連ネタとして、IchigoJamのオプション的位置づけで開発された「PanCake」というワンボードコンピュータを使って演奏してみた。
実はこのPanCakeもIchigoJamと同様に1,500円のキットとして販売されているもので、これで4和音が出せるということだったので、PanCakeが発売された直後の2015年10月に筆者も通販で購入していた。ただ、当時は難しそうだと思って、放置したままになっていた。
しかし、前回の記事をきっかけに、せっかくなので使っていないキットをハンダ付けして完成させるとともに、実際に動かしてみた。マニュアルが簡易すぎて、当初、どう使えばいいのか分からずに苦戦したが、なかなか面白い機材だったので紹介したい。
IchigoJamにPanCakeを加えてできること
IchigoJamを使ってみると、80年代の8bitコンピュータを思い出す懐かしさを感じるが、MSXなどと比較した場合、ちょっと物足りなさを感じた部分がある。その1つがカラーグラフィックが使えないということ、もう1つがまともな音が出ないという点だ。前回の記事でも示した通り、圧電ブザーを使うことで、ある程度の音は出せる、MML(ミュージック・マクロ・ランゲージ)を使った演奏機能も用意されているので、まったく音が出ないというわけではないけれど、やはりかなり貧弱なのは事実。また、映像がすべてモノクロであるのも、ちょっと寂しく感じられるところだ。
その弱点を補うために誕生したのが、今回紹介するPanCakeだ。IchigoJamが、子供のプログラミング教育用途を目指した「こどもパソコン」であるのに対し、PanCakeは音とグラフィックを出すための「こどもサウンドグラボ」と位置付けられている。もっとも、jig.jpによるIchigoJamと開発者は別のようで、PanCakeのほうは福井県にあるナチュラルスタイルという会社で開発されたとのこと。
いわゆる周辺機器だとは思うが、まだPanCakeの位置づけがよく分からないまま、ハンダ付けにより組み立てた。基板の大きさは前回で組み立てたIchigoJam Uと同じ。
部品点数的にはIchigoJamより少し多く、ハンダ付けする箇所もやや多いけれどなんとか1時間ほどで完成。やはりIchigoJamと同様に、最後にICソケットにICを挿すのだが、これを見るとIchigoJamと同じNXP製の「LPC1114FN28」が使われている。
これはARMの32bitマイコンであり、50MHzのクロックスピードを持ち、32kBのフラッシュメモリ、4kBのRAMを備えている。RAMの容量はちょっと少ないけれど、処理能力的に見れば80年代のZ-80などのCPUと比較すれば爆速コンピュータといってもいいようなものだ。
すでにNXPでは生産完了してしまったようで、単品での入手はしづらくなっているようだが、もともと200~300円程度で販売されていたことを考えると、ちょっと驚きでもある。
そんなマイコンを搭載していることからも想像できるとおり、PanCakeもひとつのコンピュータ。IchigoJamとの接続を前提とした構造にはなっているものの、実は独立でも動作するシステムとなっているのだ。ではIchigoJamとどう接続するのかというと、PanCakeから延びる28本のピンをIchigoJamのソケットに差し込むだけ。
筆者が以前購入したIchigoJamの初代機では、そこまで簡単に接続できず、いろいろな配線が必要だったのだが、現行のIchigoJam Uなら、とってもスマートというわけなのだ。もっとも、IchigoJamとPanCake間のやり取りでは、28ピンすべてが使われているわけでもなさそうだ。
重要なのは前回のMIDIでも使ったシリアル信号送信のためのTxD端子一つだけといってもいいような状況。あとはPanCakeへの電源供給用と、ビデオ信号をカスケード接続している。つまり、IchigoJamからPanCakeへはシリアル通信でコマンドを送り、それによってPanCakeが動作するようになっているのだ。だから別にIchigoJamでなくても、別のコンピュータなどからシリアル信号を送れば、PanCakeは動作してくれる機材となっているわけだ。
実際、モニターへの画面出力もIchigoJamとPanCakeはまったく別で独立している。そのため本来なら2つモニターが必要になるところだが、さすがにそれだと不便なので、PanCake側のビデオ端子からIchigoJamの画面を出力できるように切替機能も用意されている。
どうやって音を鳴らし、制御する?
PanCakeをIchigoJamと2階建て構造にした上で電源を入れると、いかにも8bitコンピュータという感じのオープニングサウンドが流れる。だいぶSNは悪い感じだが、1,500円のコンピュータから出てくる音なので、その辺は良しとしよう。そして、画面をIchigoJamからPanCakeに切り替えると、まるでファミコンのような画面が現れる。
ここまでうまくいったので、ハンダ付けは無事成功したようだが、使い方のほうは、さっぱり分からない。マニュアルといっても、ごく簡易なコマンドリファレンスしかなく、Webを見ても、わかりやすい説明をなかなか見つけることができない。ただ、IchigoJamを利用した「りんごをさっちゃん」というサンプルゲームプログラムが公開されていた。そのゲームをプレイしている公式動画がYouTubeに掲載されている。
42行のシンプルなプログラムではあるけれど、BGMがあり、効果音があって、いかにもファミコン風の画面でシンプルなゲームができているのには、ちょっと驚き。プログラムさえ組めば、少なくとも、このレベルのサウンドは出せるようなのだ。しかも、ゲームをESCキーで強制終了したら、BGMはなりっぱなしのまま、ほかの制御ができるようになった。つまり、まさに演奏はバックグラウンド処理ができるようになっているようである。
実際、音を出すにはどうしたらいいのか、コマンドリファレンスを上から順に見ていこうと、最初のコマンド、「PANCAKE SOUND」を使ってみて、いきなり挫折。ここには下のように記載されている。
PANCAKE SOUND o0 s0 o1 s1 o2 s2 o3 s3
「o0~o3はオクターブ(0~4~7)、s0~s3は音程(0~b)です。音程eはノイズです。s0~s3のHighBits4は音程(0~3)です。音を消すにはs0~s3をFFにします」とある。例としては下のように記載されている。
PANCAKE SOUND 04 00 04 04 04 07 04 FF
PANCAKE SOUND 04 20 04 24 04 27 04 FF
説明は以上であり、他に何もない。これをIchigoJamから制御するには、下のようにすることまでは記述されている。
?”PANCAKE SOUND 04 00 04 04 04 07 04 FF”
?はPRINT文であるので、前回のMIDIの制御と同様に、画面に文字をプリントすると、シリアルポートにも同じ信号が行くから、これでPANCAKEを制御しているのだということまでは理解できた。試しに、上記の例を実行してみると、確かに和音は鳴る。けれど、とりあえず1音だけ鳴らしてみようとしたところ、下のようにすると、すごく変な音が鳴りだしてしまった。
?”PANCAKE SOUND 04 00”
「PANCAKE」を「PC」と略してOKということまでは分かったけど、何がどうなっているのか、さっぱり分からない。数時間、このコマンドとだけ戦った結果、ようやく意味が分かってきた。このPanCakeはBASIC風ではあるけれど、かなり低級言語であり、融通は利かず、ここで扱っているのはすべて16進数だったのだ。そして、この例のように、引数を8個並べないと正しく機能してくれないのである。
解読した結果を説明すると、まずPanCakeの音源は単音×4chという構造になっており、各チャンネルともに4種類の音色を持っている。そして、「PANCAKE SOUND」というコマンドの引数の1つ目は1chのオクターブ、2つ目は1chの音色&音程、3つ目は2chのオクターブ、4つ目は2chの音色&音程となっているのだ。オクターブでとれる数値は00~07で、04が中央の音階。そして音色&音程のところは、上桁と下桁で意味が異なる。まず上桁というか十の位(16の位だろうか?)は0~3をとることができ、それぞれの意味は下の図のようになっている。
「80's」と「バイオリン」はちょっと無理があるような気もするが、確かに違う音色ではある。そして下桁のほうは0~Bとなる。16進数だから0、1、2、3、4、5、6、7、8、9、A、Bという数値をセットすることが可能で、さらにEを設定することでノイズを出すこともできる。それぞれの数字と音程の関係は下記の通り。
0 C
1 C#
2 D
3 D#
4 E
5 F
6 F#
7 G
8 G#
9 A
A A#
B B
E ノイズ
さらに、この音色&音程のところをFFにすると、このチャンネルをオフにして音を止めることを示す。この理解の元、4和音の音色を変えて鳴らしたものが以下のリストとビデオだ。
分かってしまうと、なかなか面白いが、公開されている情報だけで理解するのは、かなり難しいと思うし、ましてや子供が使いこなすというのは、ちょっと厳しそうだ。続いて、2つ目のコマンド、「PANCAKE SOUND1」だ。
PANCAKE SOUND1 cn on sn
上記のものと3つの引数があり、1つのチャンネルの音をセットするためのもの。先にこちらを試したほうがわかりやすかったのだと思うが、先ほどの「PANCAKE SOUND」の単音版といえばいいだろう。cnは00~03でチャンネル指定し、その次の2つの引数は先ほどとまったく同じになっている。
シーケンサ機能を使って演奏してみた
次に示す「PANCAKE MUSIC SCORE」が、まさに先ほどのゲームで使われていたBGMなどを鳴らすためのシーケンサ機能だ。まあ、シーケンサといってもMMLで指定していくものなのだが、これについても見ていこう。まず書式としては下のようになっている。
PANCAKE MUSIC SCORE cn pn tt mm
このうちcnは先ほどと同様にチャンネルを意味しているので、設定する数字は00~03。次のpnは即再生するか、後で再生するかを設定するスイッチとなっており、01なら即再生、00なら後で再生となる。ちなみに、後で「PANCAKE MUSIC PLAY 01」とすれば、その再生ができる仕掛けだ。
そしてttはテンポ&音色と、先ほどのPANCAKE SOUND文と同じように上桁と下桁で違う意味を持っている。上桁はテンポを意味して0~Fの数値をとることができる。0が一番早く、Fが一番遅いテンポなのだ。一方、下桁は先ほどと同じように0~3で、それぞれ矩形波、サイン波、80年代、バイオリンとなっている。さらに、mmのところでは、MMLで演奏情報を指定する。若干特殊なMMLとなっていて音階をC、D、E、F、G、A、Bで指定するほか、図のようなコマンドがある。
<MML>の表記
C~B ド~シの音を鳴らす
+ 前の音を半音上げる
- 前の音を半音下げる
~ 前の音を伸ばす(PanCake の MML には音の長さ指定はない)
N ノイズ
R 休符
> 1オクターブ上げる
< 1オクターブ下げる
$ 以降を繰り返し再生する
この中でユニークなのが「$」で、例えば$CDEFGFEDと指定すれば「ドレミファソファミレ」をバックグラウンドでひたすら繰り返すループ演奏が可能になるのだ。先ほどのゲームでも、これが利用されていたわけである。
この「PANCAKE MUSIC SCORE」を使って、前回同様、バッハのメヌエットを演奏させてみたのが以下のビデオだ。
下のリストを見ても分かる通り、1音目だけ4和音で、あとは2chで演奏している。またメロディー部分は1行で指定しきれなかったので、2回に分けたため、途中にWAIT文を置いている。これは手探りでタイミングがピッタリになるように指定している。こうやって演奏させてみると、やっぱりノイズは気になるところだし、チャンネルごとの音量を調整できないのも、ちょっと残念。8段階程度でもいいので、音量の調整ができると良さそうだ。
以上、PanCakeを利用したサウンド系のコマンドだけを試して、解説してみたが、いかがだっただろうか? コマンドリファレンスを見ると、さらに「PANCAKE MUSIC LOAD」というコマンドがあったり、「PANCAKE MUSIC PLAY」でチャンネル指定する方法なども記載されていたが、これらはPanCakeのファームウェアのバージョンが1.1からの対応とのこと。筆者が1年半前に購入したものはVer.1.0で、ファームウェアのアップデータも公開されているので、これを適用すれば使えるようになるはずだ。また機会があれば、この辺も見ていきたい。