ミュージック¶
BBC micro:bit の MicroPython には、強力な音楽とサウンドのモジュールがあります。 スピーカーを接続すれば 、デバイスから音を鳴らすのは非常に簡単です。ワニ口クリップを使用して、端子 0 と GND をスピーカーの正と負の入力に接続します。スピーカーにどのように接続するかは関係ありません。
注釈
圧電ブザーでこれを試してはいけません - 圧電ブザーでは単一の音しか出せません。
音楽を演奏しましょう:
import music
music.play(music.NYAN)
music
モジュールをインポートすることに注意してください。これにはサウンドの作成と制御に使うメソッドが含まれています。
MicroPython には多くのメロディが内蔵されています。ここに完全なリストがあります:
music.DADADADUM
music.ENTERTAINER
music.PRELUDE
music.ODE
music.NYAN
music.RINGTONE
music.FUNK
music.BLUES
music.BIRTHDAY
music.WEDDING
music.FUNERAL
music.PUNCHLINE
music.PYTHON
music.BADDY
music.CHASE
music.BA_DING
music.WAWAWAWAA
music.JUMP_UP
music.JUMP_DOWN
music.POWER_UP
music.POWER_DOWN
先のサンプルコードのメロディーを変更してください。どれがお気に入りですか? このような曲をお知らせの合図としてどのように使いますか?
ヴォルフガング・アマデウス・マイクロビット(Wolfgang Amadeus Microbit)¶
自分の曲を作成するのは簡単です!
各音符には音階名(C#
や F
など)、オクターブ(音の高さ)、持続時間(鳴らす時間)があります。オクターブは数字で示します ~ 0 は最低のオクターブ、4は中位の C を含み、8 は犬のための音楽を作っていない限りは必要ないぐらいに高くなります。持続時間も数字で表されます。持続時間の値が高いほど音を鳴らす時間が長くなります。持続時間の値はお互いに関連しています ~ たとえば、持続時間 4
は 持続時間 2
の 2 倍の長さです。音階名 R を使用すると、MicroPython は指定された持続時間だけ、休符(つまり無音)を再生します。
各音符は次のような文字列で表されます。
NOTE[octave][:duration]
たとえば 、"A1:4"
は音階名が A
、オクターブが 1
、持続時間が 4
である音符を指します。
音符のリストを作成してメロディーを作成しましょう(これは、画像のリストでアニメーションを作成するのと同じです)。たとえば、MicroPython が 「Frere Jaques」 (フランス民謡)の冒頭を演奏するようにする方法は次のとおりです:
import music
tune = ["C4:4", "D4:4", "E4:4", "C4:4", "C4:4", "D4:4", "E4:4", "C4:4",
"E4:4", "F4:4", "G4:8", "E4:4", "F4:4", "G4:8"]
music.play(tune)
注釈
MicroPython は上記のメロディを簡単にできます。オクターブと持続時間は次に変更するまで値をおぼえています。結果として、上記の例は次のように書き直すことができます:
import music
tune = ["C4:4", "D", "E", "C", "C", "D", "E", "C", "E", "F", "G:8",
"E:4", "F", "G:8"]
music.play(tune)
オクターブと持続時間の値がどの変えているかに注目してください。このほうが入力がずっと簡単で、読むのが簡単です。
音響効果¶
MicroPython では、音符ではないトーンを作成できます。たとえば、警察のサイレン効果を作成する方法は次のとおりです:
import music
while True:
for freq in range(880, 1760, 16):
music.pitch(freq, 6)
for freq in range(1760, 880, -16):
music.pitch(freq, 6)
この例で music.pitch
メソッドがどのように使われているかに注目してください。このメソッドは周波数の指定を期待しています。たとえば、周波数 440
は、交響楽団がチューニングするために使用する調律音 A
と同じです。
上記の例では range
関数を使用して数値の範囲を生成しています。これらの数字は音色のピッチを定義するために使用されます。 range
関数の3つの引数は、開始値、終了値、間隔幅です。したがって、 range
関数を最初に使っているところを日本語で言うと「880 から 1760 までの範囲の数字を 16 間隔で作成する」となります。2 番目に使っている range
では「1760 から 880 の範囲の値を -16 間隔で作成する」となります。これは、サイレンのような音程で上下に変化する周波数の範囲を得る方法です。
サイレンを永遠に続けるために、無限の while
ループで囲います。
重要なのは、 while
ループ内に新しい一連のループ( for
ループ)を入れたことです。この for
ループを日本語で言えば「あるコレクションの各アイテムそれぞれについて何らかのアクティビティを実行する」ということです。具体的には上記の例では「指定された周波数範囲の各周波数に対して、その周波数のピッチを6ミリ秒間再生しする」ということです。for
ループの各項目に対して行う処理はインデント(先に説明済み)していますので、Python は個々の項目を処理するコードを正確に認識しています。