藤本健のDigital Audio Laboratory

第841回

簡単プログラミングで演奏! 超小型コンピュータ「micro:bit」で遊んだ

micro:bitという4cmx5cmの小さな小さな教育用コンピュータがあるのをご存知だろうか? Raspberry PiやArduinoは知っていたけれど、恥ずかしながらmicro:bitの存在はまったく知らなかった。先週、たまたま大手家電量販店で大量に陳列していたのを見かけて、これは何だろうと手に取って、初めてその存在を知った。

micro:bit

店頭に並んでいたのはSB C&S(旧商号ソフトバンク コマース&サービス)が販売している「はじめてセット」と「アドバンスセット」というもの。よく分からないので、高いほうの(といっても税込7,000円程度)アドバンスセットを購入してみたところ、とても面白い機材だった。プログラミングしてみると、どんどん深みにはまっていきそうで、ワクワクして楽しくなってきたところだが、まずはサウンド機能を少し試したので紹介しよう。

SB C&Sが販売しているアドバンスセット

初心者や子供にも簡単な操作ですぐに音を鳴らせる

コルグのLittleBitsみたいに小さいブロックをいっぱい接続するタイプのコンピュータなのかな……なんていい加減な想像の元、高いほうを買ったmicro:bit。開けてみると小さなコンピュータ本体のほか、それを外部と接続しやすくするための拡張コネクタ、超音波センサー、スピーカー(圧電ブザー)、ワニ口クリップ、micro USBケーブル、電池ボックス、そしてテキストといろいろなパーツが入っていた。

セット内容

結果的にいうと、高いアドバンスセットも、安いはじめてセットも、micro:bit本体は同じものであり、今回必要としたのは本体とスピーカーだけなので、手元にワニ口クリップも圧電ブザーもある筆者にとっては安いほうで十分だったかもしれない。さらにいうとスイッチサイエンスなどでは本体だけを2,200円で販売しているので、それでもよかったように思うが、筆者も初めて触る初心者なので、子供向けの分かりやすい解説書がついて、何も迷わず使えたというのは正解だったのかもしれない。

ご存知ない方に説明すると、micro:bitはイギリスのBBCが主体となって1980年代に開発した教育用マイコンの進化版。イギリスの11歳、12歳の小学生全員に配布される教材とのこと。これがコンピュータなの? と不思議に思う方もいるとは思うが、ここにはARM Cortex-M0というCPUが搭載されているほか、5x5のLEDと2つのボタンスイッチ、Bluetooth LE、そして温度センサー、磁気センサー、さらには加速度センサーまで搭載されているほか、数多くのアナログ・デジタルの入出力ポートも備えた立派なマイコンなのだ。

様々なセンサーや入出力を備えたマイコン

そしてここにはmicro USBの端子が搭載されており、Windows、Mac、Linux、またスマホと接続してプログラムを送り込めるようになっている。LinuxなどのOSをインストールしないと使えないRaspberry Piなどと比較して、小学生でも扱える簡易さは、初心者にとってはとっても嬉しいところ。調べてみると、Python、Scratchのほか、Microsoft MakeCodeという言語が使えるようだが、このアドバンスセットのマニュアルで解説されていたのはMicrosoft Makecodeを使ったものだったので、素直にそれにしたがって試してみた。

使い方はいたって簡単でインストール作業も不要。PC上のChromeやSafari、Firefox、EdgeなどのWebブラウザを使って、Microsoft MakeCodeのページにアクセス。micro:bitを持っていなくても、すぐにブラウザ上でプログラムし、仮想環境で実行することができる。もちろん日本語にも対応しているので、日本の子供でも問題なく使えるし、われわれ大人にとっても扱いやすいものだった。

Microsoft MakeCodeのページ

このMicrosoft MakeCodeは、ブロックを組み合わせていく形でプログラミングしていく言語で、見た目も使い勝手もScratchとそっくりなものだ。しかし、これはJavaScriptと1対1で対応しているようで、画面上部のタブを「ブロック」から「JavaScript」に切り替えると、カワイイ画面から、プログラムコードの画面へと切り替るようになっている。反対にJavaScriptで書いたプログラムも、ブロック画面に切り替えることが可能になっている。

ブロックを組み合わせる形でプログラミング
JavaScriptに切り替えたところ

正直なところ、JavaScriptもまともに使ったことがない筆者ではあるが、BASIC程度の知識があるだけで、マニュアルなしにすぐにプログラミングにとりかかれるのがMakeCodeの面白いところ。画面左側には基本、入力、音楽、LED、無線、ループ、論理、変数、計算とメニューが並んでおり、それらを選択すると、実際の命令がブロックで表示されるから、ドラッグ&ドロップで並べていくだけでプログラムができる。

ここでは音をテーマにするので、音楽のメニューを見ると、「音を鳴らす」、「休符」、「メロディを開始する」……などがある。試しに「音を鳴らす」を使い1拍ずつ演奏できるように同じ命令を3つ並べてみた。これでド、レ、ミと設定するとブラウザ上でそれを実行し、「ドレミ」と演奏させることができる。

音楽のメニュー
3つの命令を並べたところ

これをmicro:bitで実行するには、左下にある「ダウンロード」というボタンをクリックすると、拡張子hexのファイルを保存することができる。これがプログラム本体だ。これをmicro:bitへ転送するのだが、PCとUSB接続すると1つのドライブとして見えるので、ここへドラッグ&ドロップするだけ。ファイル名は何でもよく、ドラッグ&ドロップでコピーすると、そのファイルはmicro:bitのドライブからは消えて見えなくなるのと同時に、プログラムが実行される。この先は電源さえあればPCと接続しておく必要はないので、電池ボックスから3Vを与えてもいいし、micro USBにACアダプタをつなぐ形での給電でもOK。あとは独立したコンピュータとしてプログラムを動かしてくれるのだ。

ただし、micro:bitのワンボードマイコン本体にはスピーカーがないので、付属していた定規のメモリのように並んでいる0のところと、GNDに圧電ブザーをワニ口クリップで接続すればOK。これによりプログラムが動くとドレミが繰り返し演奏される。もっとも出せる音色は単純なパルス波のピポピというチップチューンサウンドのみ。

0とGNDに圧電ブザーを接続

ちなみに、このhexファイルをテキストエディタで開いてみると16進数がズラリと並んだものとなっている。これが実行ファイルなのかと思ったら、このファイルを先ほどのMicrosoft MakeCodeのページで読み込むことができ、ブロックの画面が復活する。つまりコンパイルはしておらず、インタプリタのプログラムのままmicro:bitへ送って動かしているようだ。

hexファイルをテキストエディタで開いたところ

テルミン風の楽器を作って演奏

ドレミの演奏では画面に表示される鍵盤で音階を指定したが、これを指定すると同時にプログラム上では数字が設定されるようになっている。たとえばドなら262、レなら294、ミなら330、ラなら440。つまり、これは周波数を指定していたのだ。そこでちょっと試してみたいと思ったのが、テルミン風な楽器の作成。前述の通り、micro:bitには5x5=25個のLEDが搭載されているが、実はこれが光の逆作用により、光センサーとして機能する。つまり光センサーが感知した光の強さを周波数として与えてやれば、楽器になるだろうということで試してみた。あまりにも単純なプログラムで動くので、即動作を確認できたが、デスクライトの光が弱いため、センサーの数値をそのまま周波数として与えたのだと音程変化が少なかったので、3倍にしてみた。それをビデオで撮ってみたのでご覧いただくと雰囲気が分かるだろう。

変数を3倍に設定
テルミン風な楽器の演奏

上手に演奏するためには、かなり練習が必要そうではあったが、すごく原始的な楽器がとりあえず完成した。温度センサーではなかなか演奏できそうにないので、加速度センサーで試してみたところ傾きによって音程を変化させることができるところまでは確認した。が、これもあまり上手に演奏するのは難しそうだったので、次に試してみたいと思ったのが、micro:bitが持つ入出力ポートの活用だ。

先ほどのMicrosoft MakeCodeの画面の左側、命令群の並んだ一番下にある「高度なブロック」を開くと、さらに新しいメニューが現れる。関数、配列、文字列、ゲーム、画像、入出力端子、シリアル通信、制御、拡張機能とある。

「高度なブロック」を開くと様々な命令がある

ここで試してみたのが入出力端子。この中身を見ると、「デジタルで読み取る」、「アナログ値を読み取る」……などといった命令が用意されている。

入出力端子の項目に用意されていた命令

見てみると、全部で15ポートあるうち、入力に使えるのはP0、P1、P2、P3、P4、P10の6つ。マニュアルを見ると、定規のような目盛りが端子になっていて、ここで入出力できるようだ。ちなみに、圧電ブザーを使うためにP0は使ってしまっているので、P1に電圧を突っ込んで音階をコントロールできるようにしたいと考えた。

15ポートのうち、入力に使えるのは6つ
目盛り部分の端子で入出力

手持ちのアナログシンセサイザで演奏できる?

そこで次に試してみたのが、手持ちのアナログシンセサイザとの組み合わせ。鍵盤を弾くと音階によって電圧が変化するCV信号と、鍵盤を弾いているか離しているかの状態を表すGATE信号のそれぞれを出力できるので、これを使ってみようと思ったのだ。

手持ちのアナログシンセサイザと接続

MicroBruteというこのアナログシンセサイザで、ちゃんと電圧がでるのかを念のためテスターで調べると、ドを弾くと1.99Vとほぼ2Vが、その1オクターブ下のドを弾くと1.00Vとなり、しっかり動いているようだ。Oct/Vという規格になっているので半音上がることに1/12Vずつ上がり、1オクターブで1V上がるという仕組みになっているので、これをP1に突っ込んでみた。

テスターでチェックしてもしっかり動作しているのが分かった

micro:bit側を調べてみるとこれは0~3Vを測定できるようになっているので、本来3V以上を入れるのはよろしくない。とはいえ、5V程度入れても電流が流れるわけではないので、壊れる心配はないだろうと決行した。

5V入力してみた

では肝心の入力値がどうなるのか、電圧がそのまま計測されるわけではないだろうからと、アナログ値を読み取って、LEDに表示させる単純なプログラムを作って試したところ、すぐに結果が得られた。低いドを弾くと325、1オクターブ上で642、さらに1オクターブ上で959となり、1オクターブで317数字が上がる。さらにその上のレを弾くと1023となり上限に達してしまう。要は0~3Vを10bitでセンシングしているようだ。

アナログ値を読み取って、LEDに表示させるプログラムで結果が出た

とりあえず、難しいことは考えず、読み取った数字をそのまま周波数として音を出してみると、なんかそれっぽい演奏ができる。ただ、このままだと音が出っぱなしになるため、P2にGATE信号を入れて、その値が500より大きければ音を出し、500以下なら音を止めるというプログラムを組んでみた。実際には音を止めるという命令が見当たらなかったので、周波数0Hzを設定して演奏してみた。

P2にGATE信号を入力
音を止める命令の代わりには周波数0Hzを設定
micro:bitとアナログシンセをつないで演奏。音程は……

聞いてみると、かなり音痴ではあるけれど、それっぽい演奏ができているのが分かるだろう。読み取った値を周波数として設定して、それっぽく演奏できたのはある意味偶然ではある。しかし、下の1オクターブはともかく、上の1オクターブは、もうハチャメチャ。まあ、鍵盤を押せば音が鳴り、離せば音が止まるということも実現できたし、今回はこんなところにしておこうと一旦終えたのだが、やっぱり中途半端で悔しい気がしてならない。

音が出たことには満足したのだが……

そこで、もうちょっとプログラムして、ちゃんと演奏できる楽器にしようと、すぐに再チャレンジした。GATE信号による鍵盤のオン/オフ制御はこのままでよい。が、音程がデタラメなので、ここをしっかりしなくてはならない。

ここで考えたのは、P1で読み取った数値から、正しい音程の周波数を導き出す計算だ。低いドの信号を受けると325で、このときの周波数が262Hz。半音上がることに317÷12=26か27ずつ値が上がっていく計算で、本来センシング結果に小数はない。けれど、MakeCodeなら小数の計算もできるのかと思って、P1に入力された値から325を引き算した上で、26.4で割ってみると、ちゃんと計算ができた。これを四捨五入した結果が、低いドから何半音上がっているかを意味する数値となる。これをaという変数に代入してみた。

ちなみに、周波数は1オクターブで2倍に上がるから半音ごとに、約1.0594倍に周波数が上がる計算となる。つまり、階乗計算を使い、1.0594のa乗を、ドの周波数である262に掛ければ目的の周波数が得られることになる。文章で書いていると複雑だが、数式にすれば比較的単純。ただ、MakeCodeに階乗という関数が見当たらなかったので、ループ命令を利用し、1.0594をa回繰り返して掛け算を行なうプログラムにした。

プログラムを変更して適用

では、これで先ほどのMicroBruteを弾くとどうなるのか……。

修正後のプログラムを適用した時の演奏

今度は完璧。このプログラムでは約2オクターブしか演奏はできないけれど、ちゃんとした楽器にすることができた。しかも、こんな短いプログラムでできてしまうなんて、ちょっと感激する。久しぶりにプログラムなんて作ってみたけれど、やっぱり楽しい。今度何のプログラムを作ってみようか、今いろいろ考えているところだ。

藤本健

 リクルートに15年勤務した後、2004年に有限会社フラクタル・デザインを設立。リクルート在籍時代からMIDI、オーディオ、レコーディング関連の記事を中心に執筆している。以前にはシーケンスソフトの開発やMIDIインターフェイス、パソコン用音源の開発に携わったこともあるため、現在でも、システム周りの知識は深い。  著書に「コンプリートDTMガイドブック」(リットーミュージック)、「できる初音ミク&鏡音リン・レン 」(インプレスジャパン)、「MASTER OF SONAR」(BNN新社)などがある。またブログ型ニュースサイトDTMステーションを運営するほか、All AboutではDTM・デジタルレコーディング担当ガイドも務めている。Twitterは@kenfujimoto