音乐

这是 music 模块。您可以使用它来播放简单的曲调,前提是您将扬声器连接到您的电路板。默认情况下,music模块希望扬声器通过引脚 0 连接:

_images/music-pins.png

这种安排可以被覆盖(如下所述)。

要访问此模块,您需要:

import music

我们假设您已经为以下示例完成了此操作。

乐谱

一个单独的音符是这样指定的:

NOTE[octave][:duration]

例如,A1:4指的是八度音程 1 中的音符“A”,它持续四个节拍(节拍是由速度设置功能定义的任意时间长度 - 见下文)。如果使用音符名称R,则将其视为休止符(静音)。

意外(平坦和锐利)由 b (平坦 - 小写 b)和#锐利 - 哈希符号)表示。例如,Ab 是 A-flat 和 C# is C-升调

注释名称不区分大小写。

octave 和code class="docutils literal notranslate">duration参数是结转到以后的笔记,直到重新指定的状态。默认状态是 (包含中间 C)和(一个四分音符,给定默认速度设置 - 见下文)。octave = 4 (containing middle C) and duration = 4

例如,如果 4 个刻度是 crotchet,则以下列表是基于 crotchet、quaver、quaver、crotchet 的琶音:

['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() - 将速度重置为默认的滴答声 = 4, bpm = 120
  • music.set_tempo(ticks=8) - 改变节拍的“定义”
  • music.set_tempo(bpm=180) -只需改变节奏

计算以毫秒为单位的刻度长度是非常简单的算术:60000/bpm/ticks_per_beat . 对于默认值为或。60000/120/4 = 125 milliseconds or 1 beat = 500 milliseconds.

music.get_tempo()

获取当前速度为整数的元组:(ticks, bpm)

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

music包含上面定义的音乐 DSL 的播放。

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

如果music指定为音符列表(如上面音乐 DSL 部分中所定义),则它们会一个接一个地播放以演奏旋律。

在这两种情况下,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.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 - 贝多芬 C 小调第五交响曲的开场。
  • ENTERTAINER -斯科特乔普林的拉格泰姆经典“艺人”的开场片段。
  • PRELUDE -JSBach 的 48 首前奏曲和赋格曲 C 大调第一首前奏曲的开场。
  • ODE - 贝多芬 D 小调第九交响曲的“欢乐颂”主题曲。
  • NYAN - Nyan Cat 主题 (http://www.nyan.cat/)。作曲家不详。这是教育鼠海豚的合理使用(正如他们在纽约所说)。
  • RINGTONE - 听起来像手机铃声的东西。用于指示传入消息。
  • FUNK -为秘密特工和犯罪策划者准备的时髦低音线。
  • BLUES - 一个布吉伍吉 12 小节布鲁斯步行低音。
  • BIRTHDAY - “祝你生日快乐……”版权状态见:http://www.bbc.co.uk/news/world-us-canada-34332853
  • WEDDING -来自瓦格纳歌剧“罗恩格林”的新娘合唱团。
  • FUNERAL - “葬礼进行曲”也被称为弗雷德里克·肖邦的 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
    ~~~~~~~~

    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', '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)