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

音乐

micro:bit 上的 BiBoPython 带有强大的音乐与声音模块。你可以接扬声器或带线耳机,用鳄鱼夹连接 pin 0 与 GND;也可以直接使用 micro:bit 内置扬声器,无需外接硬件。

若外接扬声器、无源压电蜂鸣器或耳机,用鳄鱼夹把 pin 0 和 GND 接到正负输入即可。接扬声器时正负不分先后;无源蜂鸣器可能有极性(看是否有 + 标记正极)。

扬声器或蜂鸣器接到 pin0 与 GND
扬声器或蜂鸣器接到 pin0 与 GND

来听一段内置乐曲:

import music

music.play(music.NYAN)

这里 import music 导入音乐模块,其中包含发声与控制的方法。

BiBoPython 内置不少旋律,完整列表如下:

  • music.DADADADUM
  • music.ENTERTAINER
  • music.PRELUDE
  • music.ODE
  • music.NYAN
  • music.RINGTONE
  • music.FUNK
  • music.BLUES
  • music.BIRTHDAY
  • music.WEDDING
  • music.FUNERAL
  • music.PUNCHLINE
  • music.PYTHON
  • music.BADDY
  • music.CHASE
  • music.BA_DING
  • music.WAWAWAWAA
  • music.JUMP_UP
  • music.JUMP_DOWN
  • music.POWER_UP
  • music.POWER_DOWN

把示例里的旋律名换掉,听听你最喜欢哪一首。这些曲调还能当作提示音或信号吗?

小小作曲家

自己写曲子也很容易!

每个音符有名称(如 C# 或 F)、八度(音高,0 最低,4 含中央 C,8 已经很高)和时值(持续多久)。时值用数字表示,数字越大越长;例如时值 4 是 2 的两倍。音符名用 R 表示休止(静音),持续指定的时值。

每个音符写成字符串:

NOTE[octave][:duration]

例如 "A1:4" 表示八度 1 上的 A 音,时值 4。

把多个音符放进列表就得到旋律(类似用图像列表做动画)。播放《两只老虎》开头可以这样写:

import music

tune = ["C4:4", "D4:4", "E4:4", "C4:4", "C4:4", "D4:4", "E4:4", "C4:4",
        "E4:4", "F4:4", "G4:8", "E4:4", "F4:4", "G4:8"]
music.play(tune)

音效

BiBoPython 还能发出非音符的 tone,例如警笛效果:

import music

while True:
    for freq in range(880, 1760, 16):
        music.pitch(freq, 6)
    for freq in range(1760, 880, -16):
        music.pitch(freq, 6)

这里用的是 music.pitch 方法,参数是频率。例如频率 440 对应音乐会调音用的 A 音。

range 函数生成一串数字,三个参数分别是起始值、结束值和步长。第一个 range(880, 1760, 16) 表示从 880 到 1760、步长 16;第二个 range(1760, 880, -16) 步长为负,音高由高到低——就像警笛上下扫频。

警笛要一直响,所以包在无限 while 循环里。

我们还用了 for 循环——在 Python 里相当于:「对集合里的每一项,做某件事」。上面即:「对每个频率,播放 6 毫秒该音高的声音。」循环体要缩进,Python 才知道哪些代码属于循环。