ミュージック

BBC micro:bit の MicroPython には、強力な音楽とサウンドのモジュールがあります。 スピーカーや有線のヘッドフォンを接続すれば 、デバイスから音を鳴らすのは非常に簡単です。

スピーカーやヘッドフォンを繋ぐには、ワニ口クリップを使って、端子 0 と GND をスピーカー/ヘッドフォンの正と負の入力に接続します。スピーカーの場合はどちらでもかまいませんが、圧電ブザーの場合は極性があるので注意してください(プラス端子に "+" マークがあることを確認してください)。

piezo connected to pin0 and 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)

注釈

は上記のメロディを簡単にできます。オクターブと持続時間は次に変更するまで値をおぼえています。結果として、上記の例は次のように書き直すことができます:

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 は個々の項目を処理するコードを正確に認識しています。