Mircopython:在BPIbit上播放音乐


Document

播放音乐

开始学习前需了解:板子提供了一个 midi 播放功能模块,它可以对指定的 蜂鸣器 进行 PWM 输出,从而播放出音乐

使用代码如下(接口可参考 Microbit 文档)

import music
music.play(music.NYAN)

可以看到有如下列表,这都是内置的音乐

  • 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

创建一首你自己的曲子

写下一段 Python 的列表 ["C4:4", "D4", "C", "E:8"],就代表一段音乐。

这段代码可以认为每一个元素都是一个音符,它的格式满足如下:

NOTE[octave][:duration]

首先要有一丁点的乐理基本理解。

NOTE 指这一节点的音阶,通俗来讲,音乐里的 C D E F G A B 就是音阶,如 "C" 指 do,所以 C D E F G A B 就是 do re mi fa so la xi

octave 指这一节点的八度,八度就是指音程关系,简单一点讲,就是你唱 1 2 3 4 5 6 7 1 (注释:1234567 对应的音名分别是CDEFGAB),第一个 1 就是最后一个 1 的低八度,最后一个1就是第一个1的高八度,低音到高音,越小就越低音

duration 指这一节点的拍子数,简单理解为该节点音符播放持续的时间

举例来说:

"C4:4" 相当于 C(Do)在 4 (中音部分)的音符,接着 :4 指持续四个拍子,默认的拍子时长是 125 ms,即播放时长(duration)为 0.5 s

案例:基础测试

import music
music.play([ "C4", "D4", "E4", "F4", "G4", "A4", "B4", "C5"])
music.play([ "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8"])

案例:二只老虎

为了能够在板子上播放这首经典的两只老虎,准备了如下代码。

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)

它还可以进一步简化作曲过程,比如说,现在的节点 'C4:4' 将会影响到之后的八度配置,直到有新的替换。
所你可以这样写:

import music

tune = ["C4:4", "D", "E", "C", "C", "D", "E", "C", "E", "F", "G:8",
        "E:4", "F", "G:8"]
music.play(tune)

声音效果

music 让你制作非音符的声音,比如下面这里就创建了一个警笛声

from microbit import *
import music
while True:
    music.pitch(range(880, 1760, 16), 15)
    sleep(50)
    music.pitch(range(1760, 880, -16), 15)
    sleep(50)

注意 : music.pitch 方法是使用它的实例,它需要一个频率,15 的频率相当于一场用来调音的音乐会的频率

另外,在这个案例中,range 函数是被用作生成一个数字的值,这些数字定义了音调的音高,这三个参数分别分开始值,结束值,以及梯度值。因此,这里第一个 range 的意思是。创造一个频率值从 880 开始,以 16 的跨度递增到 1760 ,而至于第二个 range 是说创造一个1760 以 16 的跨度来递减到 880 。这就使得我们可以发出 一上一下 像警笛一样的声音

最后使用了 while Ture: 它会让这个警笛声一直持续下去的

获取乐谱

  • 第一次接触这种音乐的格式不懂乐理的同学可能就有点懵了。那有没有一种可以快速获取乐谱的方法呢?有网友专门制作了一个转换工具,可以自动生成音频格式的数据。那就让我们来试试用这个工具生成板子可以播放的音乐数据吧。

  • 这个工具由 fizban99 制作。 https://github.com/fizban99/microbit_rttl

  • 转换的工作是一个excel的文件来实现的,首先下载这个excel文件,点击下载

  • 有了转换的工具了,接下来就需要下载音乐源文件了,点击下面连接进行下载

  • Zip file of Mixed Tunes 1 (450 tunes)

  • Zip file of Mixed Tunes 2 (375 tunes)

  • Zip file of Mixed Tunes 3 (10,000 tunes)

  • Zip file of TV Theme Tunes (50 tunes)

  • Zip file of Christmas Tunes (70 tunes)

  • 把下载的音乐源文件都解压,所有准备工作做好之后,打开我们之前下载的excel文件,你会见到像下面的界面


    1.png
  • 点击Open RTTTL tune file ,它会自动弹出文件管理器,找到我们刚才解压的文件中的其中一个,选中要转换的音乐文件后,点击打开


  • 完成上面的步骤后就完成了转换的工作,点击 play 可以播放音乐文件, 注意:这里的 Copy code 是使用不了的,复制出来的是乱码,所以直接复制红框中的内容


  • 复制转换出来的代码,就可以让板子播放音乐了
import music
music.set_tempo(ticks=16, bpm=45)
tune = ['D#6', 'D#', 'D#:2', 'F', 'G', 'G#', 'G#', 'G', 'F', 'F:6',
        'D:2', 'D', 'D', 'D', 'D#','F', 'G', 'G', 'F', 'D#', 'D#:6',
        'D#:2', 'D#', 'D#', 'D#', 'F', 'G', 'G#', 'G#', 'G', 'F', 'F:4']
music.play(tune)

你可能感兴趣的:(Mircopython:在BPIbit上播放音乐)