音乐

这是 music 模块。只需在电路板上连接一个扬声器,您就可以用它演奏简单的曲调。默认情况下, music 模块 需要扬声器通过引脚0连接:

_images/music-pins.png

这种安排可以被覆盖(下文会讨论到这一点)

要访问该模块需要:

import music

我们假设在下面的示例中你已经这样做了。

乐谱

单独的音符因此被指定为:

NOTE[octave][:duration]

例如, A1:4 指八度音阶1中的音符”A”,其持续四个滴答音(滴答音是由节奏设定的任意时间长度-见下文)。 如果使用音符名称 R ,则将其视为一个休息(静音)。

变音(降调和升调)用 b (降调-小写字母b)和 # (升调-井字符)来表示。例如, Ab 是A-降调, C# 是C-升调。

音符名称不区分大小写。

octaveduration 参数是继续转换到后续音符直到重新指定的状态。默认状态是 octave = 4 (包含中间C)和 duration = 4 (一个四分音符,给定默认节奏设置 - 见下文)。

例如,如果4个滴答音是四分音符,下面列表中是基于琶音的四分音符,八分音符,八分音符,四分音符:

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

贝多芬的第五交响曲的开场编码为:

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

八度音阶的定义和范围符合 本页上关于科学音调符号`_表格中所列. 例如,中阶”C” 是 `’c4’`` ,音乐会”A” (440) 是 'a4' 。八度分音阶从音符”C” 开始。

函数

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

为回放设置大概的节奏。

许多滴答音(以整数表示)构成节拍。每个节拍以每分钟一定频率播放(表述为更熟悉的BPM,每分钟几个节拍,同样是以整数表示)

建议的默认值允许以下有用的行为。

  • 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 milliseconds1 beat = 500 milliseconds

music.get_tempo()

作为整数的数组得到现在的节奏: (ticks, bpm)

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

播放 music 包括以上定义的音乐数字模拟语言。

如果 music 是一个字符串,它应该是一个单独的音符,比如 'c1:4'

如果 music 是列表中的音符(如上面音乐数字模拟语言中定义),则它们会一个接一个的表演旋律。

两种情况下, durationoctave 值在音乐播放前都会重置为默认值。

指定输出引脚的可选参数可用于覆盖 microbit.pin0 的默认值。

如果 wait 设定是 True ,这个功能会被阻止。

如果 loop 设置为 True ,则曲调重复直到调用 stop (见下文)或阻止调用被中断。

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

以指定毫秒数的整数频率播放音调。例如,如果频率设置为440并且长度为1000,然后我们听到一秒钟的标准音乐会A。

如果 wait 设定 True ,这个功能会被阻止。

如果 duration 是负值,那么音调会连续播放,直到阻止调用被中断,或者在后台调用的情况下,设置新的频率或调用 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 - 贝多芬-C小调第五交响曲开场。
  • ENTERTAINER - Scott Joplin的Ragtime经典“The Entertainer”的开场片段。
  • PRELUDE - 巴赫的48首C大调前奏曲和赋格曲的前奏曲开场。
  • ODE - 贝多芬D小调第九交响曲《欢乐颂》主题
  • NYAN- Nyan Cat主题(http://www.nyan.cat/)。 作曲家未知。从教育意图来说是公平的(正如他们在纽约所说的那样)。
  • RINGTONE - 听起来像是手机铃声。用于指示传入消息。
  • FUNK - 为特务间谍和犯罪策划者设计的粗狂的低音线。
  • BLUES - Boogie-woogie 12小节蓝调低音群持续复奏
  • BIRTHDAY - “祝你生日快乐…”版权情况见:http://www.bbc.co.uk/news/world-us-canada-34332853
  • WEDDING -来自瓦格纳的歌剧《罗恩格林》中的《婚礼合唱》。
  • FUNERAL -“葬礼进行曲”即肖邦的《降b小调第二钢琴奏鸣曲》(Op. 35)第三乐章。
  • PUNCHLINE - 一个表示笑话的有趣片段已经制作完成。
  • PYTHON - 约翰·菲利普·苏萨的进行曲又名“自由钟”,巨蟒剧团的主题曲(之后Python 编程语言被命名)
  • BADDY - 无声电影时代的入口的一个坏人。
  • CHASE - 无声电影时代的追逐现场。
  • BA_DING - 表示发生了一些事情的短信号。
  • WAWAWAWAA - 一个非常悲伤的长号
  • JUMP_UP - 用于游戏中,指示向上移动。
  • JUMP_DOWN - 用于游戏中,指示向下移动。
  • POWER_UP - 一场宣传,表示一项成就解锁。
  • POWER_DOWN - 一场悲伤的宣传,表示一项成就的丧失。

示例

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

    Plays a simple tune using the Micropython music module.
    This example requires a speaker/buzzer/headphones connected to P0 and GND.
"""
from microbit import *
import music

# play Prelude in C.
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)