見出し画像

micro:bitで音楽を演奏してみよう(オリジナル拡張機能のご紹介)

はじめに

micro:bitをいろいろいじっているうちに、「これで自分の好きな音楽を流せたら楽しくね?」と思ったのですが、音を出すための仕組みが既存の環境(Makecode Editor=ブロック言語)ではめんどくさいとわかりました。具体的に言うと、1音出すのに1ブロック必要。10音で10ブロック。場所も取るしわかりづらいし、ああもう!
というわけで、micro:bitでかんたんに音楽を演奏する拡張をつくりました。
(2020/2/8:臨時記号について誤りがあったので修正)
(2020/7/15:拡張のバグ修正)

導入方法

makecode( https://makecode.microbit.org/ )でプロジェクトをつくり、拡張機能→画面上部の「検索またはプロジェクトのURLを入力」の欄に、

https://github.com/msonrm/ptx-abc-music-notation

のURLを入力すると「ptx-abc-music-notation」という拡張が表示されるので追加してください。「ABC notation」ブロックを使えるようになります。

画像7

メロディの記述方法

この拡張では、音楽をABC記譜法で記述します。音符1音1音をアルファベットと数字で記述し、メロディを1行の文字列で記述できます。詳しくはWikipedia,あるいはabc 記譜法に載っていますが、以下で簡単に説明します。

ブロック①:キー(調)を設定(set Kブロック)

画像7

キー(調)を指定。名称(A-G)と#(シャープ)、b(フラット)、m(短調)の組み合わせで表します。ハ長調はC、ト短調はGm、変ホ長調はEb

ブロック②:音符の基本長とテンポを設定(set L, Qブロック)

画像7

音符の基本長(各音符の音長はこの基本長の倍数で指定)とテンポ(1分あたりの8分音符の数)を指定。Lは8分音符(=1/8)、テンポは120が一般的。

ブロック③:メロディを演奏(playブロック)

画像7

メロディをアルファベットと数字を並べた1行で記述します。長くなりすぎるようであれば同じブロックを下に並べることもできます。1音ごとにスペースで区切ります。見やすくするために小節線『|』を入れても問題ないのですが、通常の楽譜とは異なり、臨時記号はその音符のみ適用され、小節内の以降の同音には適用されません。

音の高さ:ピアノの中央ド(C8)をC、以降レミファ‥‥をDEFGABcdefgabc'd'‥‥となります。つまりオクターブ1つ上は小文字となり、さらに上のオクターブの場合はc'd'とアポストロフィを音名のあとにつけます。オクターブ下はカンマをつけ、C,とします。アポストロフィとカンマは重ねて書けるので、2オクターブ上はc''、2オクターブ下はC,,となります。

// 主よ人の望みの喜びよ(バッハ)
C D E G F F A G G c B c G E C D E F G A G F E D E C B, C D


また、臨時記号のシャープ(半音上げる)、フラット(半音下げる)はそれぞれ、^、_を音名の前につけます。ナチュラルは=です。
(当初、#とbって書いてましたが間違いでした。)
休符はZあるいはzです。
音の長さは、上記のブロック②で設定した基本長の倍数として指定します。基本長が8分音符であれば、4分音符はC2、16分音符はC1/2、32分音符はC1/4。なお、1/2は「/」、1/4は「//」と略すこともできます。

// ボレロ(ラヴェル)
c3 B/ c/ d/ c/ B/ A/ c c/ A/ c3 B/ c/ A/ G/ E/ F/ G4 G/ F/ E/ D/ E/ F/ G/ A/ G4
// アイネ・クライネ・ナハトムジーク(モーツァルト)
// K(調)=G、L(1文字の音長)=1/4、Q(テンポ)=140
G z/ D/ G z/ D/ G/ D/ G/ B/ D' z c z/ A/ c z/ A/ c/ A/ F/ A/ D
画像7

ブロック④:音楽を停止(stop musicブロック)

画像7

演奏している音楽を停止できます。例えば、Bボタンを押された場合にこれが働くようにすれば、いつでも演奏を止められます。

ブロック⑤⑥:テンポを変更(change Qブロック)、テンポを取得(Qブロック)

画像7
画像8

テンポを変更ブロックは、指定した数値(初期値は20)だけテンポを速めます。例えばBボタンを押したときにこれが働くようにすれば、Bボタンを押しただけどんどんと曲が速くなります。
テンポを取得ブロックは、現在のテンポの値を返します。

おわりに

サンプルプログラムはこちら↓

活用例を思いついたら上記noteに追記していきます。なにかいい例があれば教えて下さいな。では♪

この記事が気に入ったらサポートをしてみませんか?