ミュージック

ミュージックのための 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=pin0, wait=True, loop=False)

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

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

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

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

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

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

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

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

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

一度に一つの端子で一つのピッチしか再生できないことに注意してください。

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

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

music.stop(pin=pin0)

指定された端子のすべての音楽再生を停止します。たとえば music.stop(pin1)``のように使います。``music.stop() のように端子を指定しない場合は 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', 'a', 'd5', 'f5', 'a4', 'd5', 'f5', 'c4', 'd', 'a', 'd5', 'f5', 'a4', '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',
    '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)