Micro:bit（micropython）で埼玉県久喜市民歌を演奏

## micro:bit(マイクロビット)とは

- 2016年に非営利団体として、ザック・シェルビーによりMicro:bit財団を設立
- イギリスでは2016年に100万人の児童に対し、Micro:bitを無償配布


#### micro:bit(マイクロビット)仕様

- イギリスの公共放送局であるBBCが中心となって開発
- プログラミング教育を目的とした小型のコンピューター
- 25個の赤色LED
- 2個のボタン
- 三軸加速度センサー
- 地磁気センサー(コンパス)
- BLE(BluetoothLow Energy)などを搭載
- プログラムで容易に制御できる
- 価格は2000円程度
- Mac、Windows両方に対応
- 環境構築不要（USBにさすだけ）
![図2_仕様.png](https://qiita-image-store.s3.amazonaws.com/0/165987/eedd99c2-836a-6a93-ad8d-c844185bb84c.png)


## Micro:bitプログラミング（JavaScripやグラフィカル言語）

Web上でプログラミングできます。（環境構築不要）

https://makecode.microbit.org/
![図3.png](https://qiita-image-store.s3.amazonaws.com/0/165987/ec14454f-d8b7-97cc-69fe-6f8c912aeb82.png)

###プログラミング（Pythonでも動きます）
![図4.png](https://qiita-image-store.s3.amazonaws.com/0/165987/478456aa-39ef-2231-d07d-b30b04a16315.png)
中身は、microPython


[ BBC micro:bit MicroPython ドキュメント](https://microbit-micropython.readthedocs.io/ja/latest/)



## Micro:bitで簡単音楽（MicroPythonを利用）

目的：Micro:bitのmusic機能を用いて、自分で打ち込んだ曲を演奏させます。
（今回は、久喜市の市民歌）
JavaScriptブロックエディタではなく、Pythonエディタでプログラミングします。

### 音符の記述方法

[ミュージック表記](https://microbit-micropython.readthedocs.io/ja/latest/music.html)
コンピューターに譜面を読み込ませることはできないので、コンピューターが読める形式で記述する必要があります。
譜面の記述方法はいくつかありますが、Pythonでは、ABC譜で記述します。
[MicroPython Document Music](https://microbit-micropython.readthedocs.io/ja/latest/tutorials/music.html)
![図6.png](https://qiita-image-store.s3.amazonaws.com/0/165987/f36272ca-d5d2-5a7b-a488-05d9e7361888.png)
####音程
ド：C　レ：D　ミ：E　ファ：F　ソ：G　ラ：A　シ：B　
フラット：b　シャープ：#　休符(無音)：R
Ab:フラット　C#：Cシャープ
音名：大・小文字を区別なし

####音の長さ
4ティックが4分音符の場合
2分音符:8,　4分音符:4,　8分音符:2

####例えば：A4:4
音名(NOTE)"A“
オクターブ(octave)4（中間の音域）
長さ(duration)が4 ティック（4分音符）
音の名前にR が指定されている場合は、休符(無音)
4分音符ド、8分音符レの場合：
C4:4、d4：2

###　市民歌をABC譜で記述

[久喜市の歌「笑顔のまち永遠なれ」](http://www.city.kuki.lg.jp/shisei/gaiyo/hanakiuta/uta.html)

![図7.png](https://qiita-image-store.s3.amazonaws.com/0/165987/a02d869a-3fa4-0c21-f456-bd0a57ba44d9.png)


ちなみに、久喜市民歌をアレンジしてダンスにした動画「クッキーダンス」というものがあります。

[3058人がダンス！平成28年度久喜市PRビデオ「1000人クッキーダンス」](https://www.youtube.com/watch?v=eJK7Z3fPzqI)

### Pythonプログラミング
[Python editor](https://python.microbit.org/v/1)

譜面から打ち込むと実際にはこんな感じになります。

```Python
from microbit import *
import music

#笑顔のまち永遠なれ
#作詞・作曲タケカワユキヒデ
#4分音符=120

kukishi=['d4:2','eb4:2','f4:2','f4:2','f4:2','f4:2','f4:2','f4:2','g4:4','a4:4','bb4:8',
        'g4:2','a4:2','bb4:2','bb4:2','a4:2','a4:2','g4:2','f4:10','r:4',
        'r:2','g4:2','g4:2','g4:2','g4:2','g4:2','a4:4','bb4:2','c5:2','a4:2','g4:2','f4:2','g4:6','r:4',
        'g4:2','g4:2','g4:2','g4:2','a4:4','bb4:4','a4:8','r:8',
        'd4:2','eb4:2','f4:2','f4:2','f4:2','f4:2','f4:2','f4:2','g4:4','a4:4','bb4:4',
        'r:2','a4:2','a4:2','bb4:2','c5:2','bb4:2','a4:2','g4:2','f4:2','g4:10','r8',
        'bb4:2','bb4:2','bb4:2','bb4:2','a4:4','bb4:4','c5:4','bb4:4','bb4:4','r:4',
        'g4:2','g4:2','g4:2','bb4:2','a4:2','a4:2','a4:2','bb4:10','r:8',
        'r:4','c5:2','c5:6','c5:2','c5:6','bb4:4','a4:4','bb4:4','a4:4','d4:4','d5:2','c5:2','c5:2','bb4:10','r:8',
        'r:4','g4:4','a4:4','bb4:4','g4:4','a4:4','bb:4','bb:4','bb4:4','a4:4','bb4:4','c5:2','c5:10',
        'r:2','bb4:2','a4:2','bb4:10','r:2','bb4:2','a4:2','bb4:10',
        'r:4','bb4:2','a4:6','bb4:4','c5:4','d5:2','c5:4','bb4:2','bb4:4','r:8',
        'g4:2','a4:2','a4:2','a4:2','bb4:4','c5:4','eb5:4','d5:4','c5:4','d5:4','c5:4','bb4:2','bb4:10',
        'r:4','bb4:4','bb4:2','a4:2','a4:2','bb4:10','r:8','r:16']

while True:
    #Aボタンを押すと始まります。
    if button_a.is_pressed():
     	#テンポはbpmの値で変えられます。
        music.set_tempo(ticks=4, bpm=150)
        music.play(kukishi)
	#Bボタンを押すとプログラム終了です。（演奏途中で停止はできません）
    elif button_b.is_pressed():
        break

    else:
        pass
```
ソースコードは、
https://github.com/SGyutan/microbti_shiminka
に上げています。

###　実行方法

#### 実行ファイルの作成

Downloadボタンを押して、hexファイルを作成します。それをUSB接続されたMicrobitのホルダーに入れます。

#### 接続方法

Micro:bitの端子をスピーカーかイヤホンに接続します。

イヤホンの場合：決して耳にイヤホンを着けないでください。**危険です。**

***かなり***音が大きいです。

イヤホンのジャック端子では、端子の外側がGND、中心の端子が0です。

![図10.png](https://qiita-image-store.s3.amazonaws.com/0/165987/ef4b5268-cab9-e940-b381-466de6754d56.png)
![図10-2.png](https://qiita-image-store.s3.amazonaws.com/0/165987/5bd7f97a-4517-0169-b6b8-032e88b3bfaf.png)


##（参考）音楽をコンピューターで扱うためのデータフォーマット

音楽をコンピューターで扱うためのデータフォーマット
紙やPDFで人間が可読できるものからコンピューターが可読できるものへの変換

#### [MusicXML](https://ja.wikipedia.org/wiki/MusicXML)

- XML形式の楽譜表記のためのオープンなファイルフォーマット
- Recordare（現MakeMusic）によって開発
- FinaleやSibelius、Rosegarden、Notionなどの楽譜作成ソフトウェアによって作成することが可能

#### [ABC記譜法]([https://](https://ja.wikipedia.org/wiki/ABC%E8%A8%98%E8%AD%9C%E6%B3%95)[ja.wikipedia.org/wiki/ABC%E8%A8%98%E8%AD%9C%E6%B3%95](https://ja.wikipedia.org/wiki/ABC%E8%A8%98%E8%AD%9C%E6%B3%95))

- パソコン等で使われる音楽記述言語の一つ
- イギリスのChrisWalshawによって考案
- 単に「ABC」とも、また小文字で「abc」とも言う。
- 音高を表すアルファベットと、音長を表す数字、その他の若干の記号を組み合わせて表記

#### [MIDI(Musical Instrument Digital Interface の略称)]([http://](http://d.hatena.ne.jp/keyword/MIDI)[d.hatena.ne.jp/keyword/MIDI](http://d.hatena.ne.jp/keyword/MIDI))

- シンセサイザーを搭載する電子楽器の演奏情報のデータ形式、プロトコル、物理的インターフェイスの規格。
- MIDIデータは小節・拍といった時間概念を持っており、そのスケール上のどのタイミングでどのキーをどの位の強さ、長さで押したかというノート（音符）情報を記録.(MIDIデータとは電子楽器にとっての楽譜)
- この他、各パートの音色選択やボリュームやパン（左右の定位）の情報、リバーヴやコーラスといったエフェクトの度合いなど、楽器のコントロールに関する様々な情報を取り扱う。(これにより、ひとつの鍵盤で複数の電子楽器（以下MIDI音源と呼ぶ）を同時に演奏したり、パソコンなどからMIDIデータを再生することによって、MIDI音源を演奏することができる。)
- MIDIデータとは演奏情報であり、音そのものではない。つまり、MIDIデータだけでは音は鳴らず、それを受けて演奏するシンセサイザーがあって初めて音楽として再生できる。


#### [WAV](https://ja.wikipedia.org/wiki/WAV)

- WAVまたはWAVE（ウェーブ、ウェブ）(RIFF waveform Audio Format) は、マイクロソフトとIBMにより開発された音声データ記述のためのフォーマット
- 主としてWindowsで使われるファイル形式
- ファイルに格納した場合の拡張子は.wav

#### [MP3](https://ja.wikipedia.org/wiki/MP3)

- MP3（エムピースリー、英:MPEG-1 Audio Layer-3）は、音響データを圧縮する技術の1つ
- それから作られる音声ファイルフォーマット
- ファイルの拡張子は.mp3
- MP3は、音声の周波数帯域では極端な声質の劣化を伴わずに圧縮
- 音声をデジタル化するために用いられる
- 後に音楽をCDなどの音源媒体からパーソナルコンピュータ(PC) のハードディスクドライブ(HDD) に取り込む用途で広く普及