1. 文档中心
  2. 比卜创造 Micro:bit
  3. API 参考
  4. 音乐

music

music 模块用于创作和播放旋律。默认情况下,声音会通过边缘连接器上的引脚 0 以及板载扬声器输出。你可以将有线耳机或扬声器连接到边缘连接器的引脚 0 与 GND 来收听声音。

音乐输出引脚示意
音乐输出引脚示意

你也可以关闭或开启板载扬声器,或将声音输出到其他引脚。

使用本模块前需先导入:

import music

下文示例均假设已完成导入。

音乐记谱

单个音符的写法如下:

NOTE[octave][:duration]

例如,A1:4 表示八度 1 中的音符 A,持续 4 个 tick(tick 是由节拍设置函数定义的任意时间单位,见下文)。若音符名为 R,则视为休止(静音)。

变音(降号与升号)分别用 b(降号,小写 b)和 #(升号,井号)表示。例如 Ab 为降 A,C# 为升 C。

音符名称不区分大小写。

octave 与 duration 参数会延续到后续音符,直到重新指定。默认值为 octave = 4(含中央 C)和 duration = 4(在默认节拍设置下为四分音符,见下文)。

例如,若 4 个 tick 为一个四分音符,下列列表为四分音符、八分音符、八分音符、四分音符的琶音:

['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 Hz)为 'a4'。八度从音符 C 开始。

函数

set_tempo(ticks=4, bpm=120)

设置近似的播放节拍。

若干 tick(整数)构成一拍。每拍以每分钟若干次(BPM,beats per minute,整数)的频率播放。

建议的默认值支持以下常用行为:

  • music.set_tempo() — 将节拍重置为默认 ticks = 4、bpm = 120
  • music.set_tempo(ticks=8) — 改变一拍的「定义」
  • music.set_tempo(bpm=180) — 仅改变速度

计算一个 tick 的毫秒长度很简单:60000/bpm/ticks_per_beat。默认值下为 60000/120/4 = 125 毫秒,即 1 拍 = 500 毫秒。

get_tempo()

获取当前节拍,返回整数元组:(ticks, bpm)。

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

播放包含上述音乐 DSL 的 music。

若 music 为字符串,应为单个音符,例如 'c1:4'。

若 music 为音符列表(见上文音乐 DSL),则依次播放以构成旋律。

两种情况下,播放前都会将 duration 与 octave 重置为默认值。

可选参数 pin 可指定输出引脚,覆盖默认的 bibo.pin0。若不想播放任何声音,可使用 pin=None。

若 wait 为 True,此函数会阻塞。

若 loop 为 True,曲调会重复播放,直到调用 stop(见下文)或阻塞调用被中断。

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

以给定整数频率播放音高,持续指定毫秒数。例如频率 440、时长 1000 时,可听到标准音乐会 A 持续一秒。

注意:同一时刻只能在一个引脚上播放一个音高。

可选参数 pin 可覆盖默认的 bibo.pin0。若不想从引脚输出声音,可使用 pin=None。

若 wait 为 True,此函数会阻塞。

若 duration 为负数,音高会持续播放,直到阻塞调用被中断,或在后台调用时设置了新频率或调用了 stop(见下文)。

stop(pin=pin0)

停止板载扬声器及所有正在输出声音的引脚上的音乐播放。可提供可选参数指定引脚,例如 music.stop(pin1)。

reset()

按以下方式重置相关属性:

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

内置旋律

为便于教学与娱乐,模块包含若干以 Python 列表表示的示例曲调,用法如下:

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

内置示例曲调可供教学与娱乐使用:

  • DADADADUM — 第五交响曲开头风格
  • ENTERTAINER — 经典拉格泰姆风格片段
  • PRELUDE — C 大调前奏曲风格开头
  • ODE — 「欢乐颂」主题风格
  • NYAN — 流行猫主题风格(教育示例)
  • RINGTONE — 类似手机铃声,用于提示收到消息
  • FUNK — 放克贝斯线风格
  • BLUES — 12 小节蓝调行走贝斯风格
  • BIRTHDAY — 生日歌风格
  • WEDDING — 婚礼进行曲风格
  • FUNERAL — 葬礼进行曲风格
  • PUNCHLINE — 表示笑话讲完的短片段
  • PYTHON — 经典进行曲风格主题(Python 语言命名梗相关)
  • BADDY — 默片时代反派登场
  • CHASE — 默片时代追逐场景
  • BA_DING — 表示某事已发生的短提示音
  • WAWAWAWAA — 非常悲伤的长号
  • JUMP_UP — 游戏中表示向上移动
  • JUMP_DOWN — 游戏中表示向下移动
  • POWER_UP — 表示成就解锁的 fanfare
  • POWER_DOWN — 表示成就失去的 sad fanfare