ミュージック¶
ミュージックのための music
モジュールが用意されています。スピーカーをボードに接続すれば、簡単な曲を演奏することができます。デフォルトで、music
モジュールはスピーカーが端子 0 を介して接続されることを期待しています:
この結線は(後述するように)変更できます。
このモジュールにアクセスするには、以下が必要です:
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
が音のリストとして指定されている場合(上記のミュージック表記で説明されていたように)、それらは順番に演奏されてメロディを演奏します。どちらの場合も、
duration
とoctave
の値は、音楽が再生される前にデフォルトにリセットされます。出力端子を指定するためのオプションの引数を使用して、出力端子のデフォルト
microbit.pin0
を変更できます。wait
がTrue
の場合、この関数はブロックしますloop
がTrue
の場合、曲はstop
(後述)が呼ばれるか、ブロックが解除されるまで繰り返し演奏されます。
-
music.
pitch
(frequency, len=-1, pin=microbit.pin0, wait=True)¶ 指定されたミリ秒間の整数周波数でピッチを再生します。たとえば、周波数を 440 に設定し、長さを 1000 に設定すると、標準のコンサート A が1秒間聞こえます。
wait
がTrue
の場合、この関数はブロックします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)