美文网首页
Mircopython:在BPIbit上播放音乐

Mircopython:在BPIbit上播放音乐

作者: Janzz | 来源:发表于2019-04-01 22:34 被阅读0次

    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: 它会让这个警笛声一直持续下去的

    获取乐谱

    • 点击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上播放音乐

          本文链接:https://www.haomeiwen.com/subject/clhibqtx.html