ミュージック

ミュージックのための music モジュールが用意されています。スピーカーをボードに接続すれば、簡単な曲を演奏することができます。デフォルトで、music モジュールはスピーカーが端子 0 を介して接続されることを期待しています:

_images/music-pins.png

この結線は(後述するように)変更できます。

このモジュールにアクセスするには、以下が必要です:

import music

以降の例ではこれを行ったと仮定します。

ミュージック表記

個々の音は次の形式で指定します:

NOTE[octave][:duration]

たとえば A1:4 は音名(NOTE) 「A」、オクターブ(octave) 1、長さ(duration)が 4 ティックであることを意味します(ティックは後述するテンポ設定機能で定義された任意の長さです)。音の名前に R が指定されている場合は、休符(無音)として扱われます。

臨時記号(フラットとシャープ)は b (フラット - 小文字の b)と # (シャープ - ハッシュ記号)で示されます。たとえば Ab は A フラットであり C# は C シャープです。

音名は大文字と小文字を区別しません。

オクターブ octave と長さ duration パラメータは、再び指定されるまで、後続の音に引き継がれます。デフォルトの状態は octave = 4 (ミドルの C を含む)と duration = 4 (後述のテンポ設定でデフォルトで与えられている4分音符)です。

たとえば、4 ティックが4分音符の場合、以下のリストは、4分音符、8分音符、8分音符、4分音符ベースのアルペジオです。

['c1:4', 'e:2', 'g', 'c2:4']

ベートーヴェンの第5交響曲のオープニングは次のようにコード化されるでしょう:

['r4:2', 'g', 'g', 'g', 'eb:8', 'r:2', 'f', 'f', 'f', 'd:8']

1 オクターブの定義と範囲は、 このページの科学的な音程表記についての表 にしたがいます。たとえば、ミドル 「C」 は 'c4' で、コンサート 「A」 (440)は 'a4' です。オクターブは音 「C」 で始まります。

関数

music.set_tempo(ticks=4, bpm=120)

再生するためのおおよそのテンポを設定します。

(整数で表される)ティック数 ticks が1ビートを構成します。各ビートは、1分あたりの特定の周波数で再生されます(これはよく知られた BPM - beats per minute - を整数で指定します)。

推奨されるデフォルト値では、次のような便利な動作が可能です:

  • music.set_tempo() - テンポをデフォルト値の ticks = 4, bpm = 120 にリセットする
  • music.set_tempo(ticks=8) - ビートの「定義」を変更する
  • music.set_tempo(bpm=180) - テンポを変えるだけです

ミリ秒単位でティックの長さは非常に簡単な計算で求まります: 60000/bpm/ticks_per_beat 。デフォルト値は 60000/120/4 = 125 ミリ秒 または 1 beat = 500 ミリ秒 となります。

music.get_tempo()

現在のテンポを整数のタプル (ticks, bpm) として取得します。

music.play(music, pin=microbit.pin0, wait=True, loop=False)

先に説明したミュージック表記を含んだ music を演奏します。

music が文字列ならば 'c1:4' のような単一の音であることが期待されます。

music が音のリストとして指定されている場合(上記のミュージック表記で説明されていたように)、それらは順番に演奏されてメロディを演奏します。

どちらの場合も、durationoctave の値は、音楽が再生される前にデフォルトにリセットされます。

出力端子を指定するためのオプションの引数を使用して、出力端子のデフォルト microbit.pin0 を変更できます。

waitTrue の場合、この関数はブロックします。

loopTrue の場合、曲は stop (後述)が呼ばれるか、ブロックが解除されるまで繰り返し演奏されます。

music.pitch(frequency, len=-1, pin=microbit.pin0, wait=True)

指定されたミリ秒間の整数周波数でピッチを再生します。たとえば、周波数を 440 に設定し、長さを 1000 に設定すると、標準のコンサート A が1秒間聞こえます。

waitTrue の場合、この関数はブロックします。

len が負の場合、ブロックが解除されるか、バックグラウンドで新しい周波数が設定されるか、 stop (後述)が呼び出されるまで、ピッチが連続して再生されます。

music.stop(pin=microbit.pin0)

指定された端子のすべての音楽再生を停止します。

music.reset()

次のように属性の状態をリセットします:

  • ticks = 4
  • bpm = 120
  • duration = 4
  • octave = 4

内蔵メロディ

教育と娯楽の目的のために、このモジュールには、Python のリストとして表現されるいくつかの楽曲が含まれています。これらは次のように使用できます:

>>> import music
>>> music.play(music.NYAN)

すべての曲は、著作権で保護されていないか、Nicholas H.Tollervey によって構成され、パブリックドメインに公開されているか、未知の作曲家による公平(教育的)使用規定の対象です。

内蔵されている曲は以下のとおりです:

  • DADADADUM - ベートーヴェンの第5番交響曲第5番のオープニング曲。
  • ENTERTAINER - スコット・ジョプリンのラグタイム・クラシック "The Entertainer" のオープニング部分。
  • PRELUDE - J.S.バッハの 48 のプレリュードとフーガの C メジャーの第1回プレリュードのオープニング。
  • ODE - ベートーヴェンの第9回シンフォニー・ミー・マイナーのテーマ "Ode to Joy"
  • NYAN - Nyan Cat テーマ (http://www.nyan.cat/)。作曲家は不明です。これは educational porpoises にとって(彼らがニューヨークで言っているように)公正な利用です。
  • RINGTONE - 携帯電話の着信音のようなもの。着信メッセージを示すために使います。
  • FUNK - シークレット・エージェントと犯罪の黒幕のためのファンキーなベースライン。
  • BLUES - ブギー・ウーギーの 12 小節のブルース・ウォーキング・ベース。
  • BIRTHDAY - 「Happy Birthday to You …」 の著作権表示については http://www.bbc.co.uk/news/world-us-canada-34332853 を参照してください。
  • WEDDING - ワグナーのオペラ「Lohengrin」のブライダルコーラス。
  • FUNERAL - フレデリック・ショパンのピアノソナタ第2番「B♭マイナー」の別名「葬儀の行進」35。
  • PUNCHLINE - ジョークが行われたことを意味する楽しい部分。
  • PYTHON - John Philip Sousa さんの行進「Liberty Bell」、別名「Monty Python’s Flying Circus」(その後、Python プログラミング言語の名前となる)。
  • BADDY - 無声映画時代の悪役の登場。
  • CHASE - 無声映画時代のチェイスシーン。
  • BA_DING - 何かが起こったことを示す短い信号。
  • WAWAWAWAA - 非常に悲しいトロンボーン。
  • JUMP_UP - ゲームでの使用で、上方向の動きを示します。
  • JUMP_DOWN - ゲームでの使用で、下向きの動きを示します。
  • POWER_UP - パワーが解放されたことを示すファンファーレ。
  • POWER_DOWN - パワーが失われたことを示すための悲しい運命。

サンプルコード

"""
    music.py
    ~~~~~~~~

    microPython の music モジュールを使って簡単な曲を演奏します。
    このサンプルでは、P0 と GND の端子にスピーカー/ブザー/ヘッドホンを繋ぐ必要があります。
"""
from microbit import *
import music

# C (4分の4拍子)でプレリュードを演奏。
notes = [
    'c4:1', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5',
    'c4', 'd', 'g', 'd5', 'f5', 'g4', 'd5', 'f5', 'c4', 'd', 'g', 'd5', 'f5', 'g4', 'd5', 'f5',
    'b3', 'd4', 'g', 'd5', 'f5', 'g4', 'd5', 'f5', 'b3', 'd4', 'g', 'd5', 'f5', 'g4', 'd5', 'f5',
    'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5',
    'c4', 'e', 'a', 'e5', 'a5', 'a4', 'e5', 'a5', 'c4', 'e', 'a', 'e5', 'a5', 'a4', 'e5', 'a5',
    'c4', 'd', 'f#', 'a', 'd5', 'f#4', 'a', 'd5', 'c4', 'd', 'f#', 'a', 'd5', 'f#4', 'a', 'd5',
    'b3', 'd4', 'g', 'd5', 'g5', 'g4', 'd5', 'g5', 'b3', 'd4', 'g', 'd5', 'g5', 'g4', 'd5', 'g5',
    'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5',
    'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5',
    'a3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'a3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5',
    'd3', 'a', 'd4', 'f#', 'c5', 'd4', 'f#', 'c5', 'd3', 'a', 'd4', 'f#', 'c5', 'd4', 'f#', 'c5',
    'g3', 'b', 'd4', 'g', 'b', 'd', 'g', 'b', 'g3', 'b3', 'd4', 'g', 'b', 'd', 'g', 'b'
]

music.play(notes)