（2019/12/13追記）Micro:bit で音楽をかんたんに演奏したかった→拡張をつくった

#はじめに
Micr:bitという小さな基板のキットがあります。PCやタブレット等につなぎ、ブロック言語でプログラムを記述してコントロール等できます。基板には光センサ、磁気センサ、傾きと加速度センサ、温度センサが付いており、それらからデータを取得したり、AとBの2つのボタンの入力を受け取ったり、5*5のLED（やオプション基板or端子に接続したスピーカ）からの出力が可能です。他にも色々。
2020年からのプログラミング的思考の教育義務化に家庭内で対応するため、秋葉原でこのMicro:bitを購入し、子どもたちと遊んでいるうちに親のほうが夢中になってしまいました。
いろいろいじっているうちに、「これで自分の好きな音楽を流せたら楽しくね？」と思ったのですが、音を出すための仕組みが既存の環境（Makecode Editor=ブロック言語）ではめんどくさいとわかりました。具体的に言うと、1音出すのに1ブロック必要。10音で10ブロック。場所も取るしわかりづらいし、ああもう！
というわけで、Micro:bitでかんたんに音楽を演奏する拡張をつくりました。

#成果物
こちら↓
https://github.com/msonrm/ptx-abc-music-notation
![Screenshot 2019-12-13 at 12.08.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541130/445b41f4-a860-5234-abe4-55316fc68a4a.png)

makecode( https://makecode.microbit.org/ )でプロジェクトをつくり、拡張機能→画面上部の「検索またはプロジェクトのURLを入力」の欄にこのURLを入力すると、「ptx-abc-music-notation」という拡張が表示されるので、それを追加すればつかえるようになります。
<blockquote class="twitter-tweet"><a href="https://twitter.com/mymrr_narupapa/status/1203883190726746112" /></blockquote>

#使用方法
この拡張では、音楽をABC記譜法(ABC notation→[Wikipedia](https://ja.wikipedia.org/wiki/ABC%E8%A8%98%E8%AD%9C%E6%B3%95),あるいは[abc 記譜法](http://www.ne.jp/asahi/music/marinkyo/ml/abc-regulo.html.ja)を参照のこと)で記述します。
##楽譜の基本情報
###キー
![Screenshot 2019-12-13 at 11.07.17 - Edited.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541130/25462c54-338e-d63a-92a5-5ca6b9390319.png)
キー(K:key)の名称(A-G)と#、bの組み合わせで記述。この拡張のキーブロックではプルダウンから選択可能。
###音符の基本長とテンポ
![Screenshot 2019-12-13 at 11.07.17 - Edited (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541130/5ca0e4c1-0895-8a06-3011-a63b7a9e8372.png)
音符の基本長(L、各音符の音長はこの基本長の倍数で指定)とテンポ(Q、1分あたりの8分音符の数)を指定。Lは8分音符(=1/8)、テンポは120が一般的。
##音符の記述方法
![Screenshot 2019-12-13 at 11.34.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541130/d5fac6b7-7066-b3e7-d2a4-489fbbcf7dd8.png)
それぞれの音符は半角空白により区切る。見やすくするために小節線"|"を入れても問題ないが、(通常の楽譜とは異なり)臨時記号はその音符のみ適用され、小節内の以降の同音には適用されない。
###音の高さ
ピアノの中央ド(C8)をC、以降レミファ‥‥をD、E、F、G、A、B、c、d‥‥となる。つまりオクターブ1つ上は小文字となり、さらに上のオクターブの場合はc'、d'とアポストロフィを音名のあとにつける。オクターブ下はカンマをつけ、C,とする。アポストロフィとカンマは重ねて書けるので、2オクターブ上はc''となる。
また、臨時記号のシャープ、フラットはそれぞれ、#とbを音名の前につける。
###音の長さ
上記で設定した基本長の倍数にて指定。基本長が8分音符であれば、4分音符はC2と記述する。16分音符はC1/2、32分音符はC1/4となる。1/2は/、1/4は//と略すことも可能。
###ABC記譜法のうち未対応部分
上記以外は基本的に未対応。例：小節と繰り返し指定、スラー、タイ、スタッカート、3連音、2音符にまたがる付点指定(>や<)、等々。
##サンプル
キーはA、Lは1/4、Qは120くらい。
『A a3/2 e/ e f e2 z c f3/2 e/ e c A2 z A c e e c g f g f a f d B e2 z A a3/2 e/ e f e2 z c f3/2 e/ e c A2 z A c e e c g f g f a f a f4 a4』
（サンプルメロディは眉村ちあき「ピッコロ虫」の冒頭部分）
##上記以外のブロック
###テンポの増減
![Screenshot 2019-12-13 at 11.07.17 - Edited (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541130/14502578-883d-ce85-dd15-e5798bbafcf3.png)
指定した値だけテンポを加算。マイナス値の指定も可能。例えばAボタンに20、Bボタンに-20とすれば、演奏中にボタンを押してテンポを自由に変えられて楽しいよ。
###テンポの値を返す
![Screenshot 2019-12-13 at 11.07.17 - Edited (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541130/e09264ba-1e1a-f113-40cf-c41f4f21f851.png)
数字表示のブロックに組み込み、現在のテンポを表示させるときなどに使用できる。

#参照した記事など
プログラミング初心者ががんばってTypeScriptをおぼえて、がんばって拡張を書いてみましたって感じです。
参考にしたのは、@asondemita さんの↓の記事。
『 ブラウザだけで micro:bit javascriptブロックエディター用パッケージ（拡張）が作れるGitHub package authoring(https://qiita.com/asondemita/items/0da65f1dc1ab24918af4 ）』

「なんじゃこりゃ変なの初心者丸出しじゃん」という点は多々あるでしょうが、ご容赦ください。では。