micro:bitで遊んでみよう!(8)〜明るさセンサーでオルゴール編〜

2021年1月3日

micro:bitで「Morning Music」を鳴らすよ!

皆さんこんにちは。本来のブログ開設目的を忘れつつあるシオナイト(@sheonite)です。今回は初心に帰ります。

micro:bitには様々なセンサー付いており、その一つに明るさセンサーがあります。今回はこれを使って、箱を開けたら音楽が流れるオルゴールのようなものを作ってみたいと思います。冷蔵庫を開けたら音楽が流れるチャイムでも可。

本当は箱を開けたら「ニャ〜」と鳴くシュレーディンガーの猫BOX(意味が違う)を作りたかったのですが、micro:bitで音声を流すのは私の腕前では不可能と判明しましたので、諦めてコナミのアーケード基板「バブルシステム」のウォーミングアップの時に流れる「Morning Music」を演奏してみます。

楽譜を入手する

オールドゲーマーにはかなり懐かしい「Morning Music」。この曲が収録されているCDは何枚か持っているのですが、音楽の才がない私が耳コピーなんか始めてしまうと完成に半年くらいかかってしまいそうなので、素直にグーグル先生に頼ります。

ということで、こちらのサイトで発見。ネットは広大だわ。

モーニングミュージックの楽譜です。音楽苦手な私は見ているだけで頭が痛くなりそうです。
モーニングミュージックの楽譜です。音楽苦手な私は見ているだけで頭が痛くなりそうです。

これを見ながら音符の下に「レ」とか「シ」とか書いていきます。小学生か(笑)。音楽真面目に勉強しておけば良かったなぁ。

明るさセンサーの設定をする

micro:bitのプログラミングは今までどおり、makecodeのサイトで行います。しばらく来ないうちにデザインが変わってました。

微妙にデザインが変わったmakecode。
微妙にデザインが変わったmakecode。

明るさセンサーは0から255の値を返してくるようですので、とりあえず真ん中あたりの128を超えたら指示を実行するようにブロックを組みました。

明るさが128を超えたら実行。
明るさが128を超えたら実行。

でもこの数値、何回か試しているうちに、暗めの部屋だと反応しないことがわかりましたので、後で50に変更しています。

ひたすらメロディーを入力

あとはひたすらメロディーを入力するのみです!

ひたすら入力!
ひたすら入力!

ブロックが多くなってきたら、ブラウザの挙動が怪しくなってきました。少し編集するたびにダイヤログが表示されます。

容量がたりないとかいう警告。
容量がたりないとかいう警告。

半分くらい入力したところでブロックが8割くらい消えるという泣きたくなるようなアクシデントに見舞われましたがなんとか打ち込み終了。

なげぇよ!

長ぇよ。これじゃブラウザさまもお怒りになりますよね(笑)。

動かしてみよう(動かないけど)

それでは実機の動画をどうぞ。

マニアの方に言わせると「ここ違うぞ」っていうところが何箇所かあると思いますけどお許しください。付点のところがどうしてもうまく行きませんでした。おそらくmicro:bitのブロックエディタ上の制約だと思うのですが。

あと、最後の方、楽譜どおりではなく少しアレンジして打ち込んでます。アレンジといっても手持ちのCD「MIDI POWER X68000 COLLECTION ver.1.0」に準拠したカタチです。楽譜の方がうまく読めなくて諦めただけなのですが(笑)。

最後に、せっかく打ち込んだのでJavaScriptの方のソースコードを掲載しておきます。需要ないと思いますけど(笑)。

それではまた!

basic.forever(function () {
    while (input.lightLevel() >= 50) {
        music.setTempo(30)
        music.playTone(294, music.beat(BeatFraction.Quarter))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(523, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Sixteenth))
        music.playTone(440, music.beat(BeatFraction.Sixteenth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Sixteenth))
        music.playTone(330, music.beat(BeatFraction.Sixteenth))
        music.playTone(294, music.beat(BeatFraction.Quarter))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(523, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(523, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Sixteenth))
        music.playTone(392, music.beat(BeatFraction.Sixteenth))
        music.playTone(392, music.beat(BeatFraction.Half))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(262, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Sixteenth))
        music.playTone(330, music.beat(BeatFraction.Sixteenth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(262, music.beat(BeatFraction.Eighth))
        music.playTone(247, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(262, music.beat(BeatFraction.Sixteenth))
        music.playTone(294, music.beat(BeatFraction.Sixteenth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(247, music.beat(BeatFraction.Eighth))
        music.playTone(262, music.beat(BeatFraction.Quarter))
        music.playTone(392, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Sixteenth))
        music.playTone(330, music.beat(BeatFraction.Sixteenth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Sixteenth))
        music.playTone(392, music.beat(BeatFraction.Sixteenth))
        music.playTone(392, music.beat(BeatFraction.Half))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Half))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Half))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(523, music.beat(BeatFraction.Eighth))
        music.playTone(587, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(523, music.beat(BeatFraction.Quarter))
        music.playTone(523, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(523, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(494, music.beat(BeatFraction.Quarter))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(262, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Eighth))
        music.playTone(277, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Whole))
        music.playTone(294, music.beat(BeatFraction.Half))
        music.playTone(294, music.beat(BeatFraction.Quarter))
        music.playTone(220, music.beat(BeatFraction.Sixteenth))
        music.playTone(294, music.beat(BeatFraction.Sixteenth))
        music.playTone(330, music.beat(BeatFraction.Sixteenth))
        music.playTone(440, music.beat(BeatFraction.Sixteenth))
        music.playTone(494, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Eighth))
        music.playTone(277, music.beat(BeatFraction.Quarter))
        music.playTone(220, music.beat(BeatFraction.Sixteenth))
        music.playTone(277, music.beat(BeatFraction.Sixteenth))
        music.playTone(330, music.beat(BeatFraction.Sixteenth))
        music.playTone(440, music.beat(BeatFraction.Sixteenth))
        music.playTone(440, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Eighth))
        music.playTone(277, music.beat(BeatFraction.Eighth))
        music.playTone(247, music.beat(BeatFraction.Quarter))
        music.playTone(220, music.beat(BeatFraction.Sixteenth))
        music.playTone(247, music.beat(BeatFraction.Sixteenth))
        music.playTone(294, music.beat(BeatFraction.Sixteenth))
        music.playTone(392, music.beat(BeatFraction.Sixteenth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(277, music.beat(BeatFraction.Eighth))
        music.playTone(247, music.beat(BeatFraction.Eighth))
        music.playTone(233, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(277, music.beat(BeatFraction.Eighth))
        music.playTone(247, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(277, music.beat(BeatFraction.Sixteenth))
        music.playTone(294, music.beat(BeatFraction.Sixteenth))
        music.playTone(277, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Sixteenth))
        music.playTone(277, music.beat(BeatFraction.Sixteenth))
        music.playTone(247, music.beat(BeatFraction.Quarter))
        music.playTone(392, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Eighth))
        music.playTone(220, music.beat(BeatFraction.Quarter))
        music.playTone(440, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(196, music.beat(BeatFraction.Eighth))
        music.playTone(247, music.beat(BeatFraction.Eighth))
        music.playTone(330, music.beat(BeatFraction.Eighth))
        music.playTone(370, music.beat(BeatFraction.Eighth))
        music.playTone(392, music.beat(BeatFraction.Quarter))
        music.rest(music.beat(BeatFraction.Eighth))
        music.playTone(277, music.beat(BeatFraction.Eighth))
        music.playTone(294, music.beat(BeatFraction.Whole))
    }
})