资讯中心 Info
当前位置:酷叮猫 > 资讯中心 >
Python 贝加尔湖畔
发布日期:2018-11-21 阅读次数:

《贝加尔湖畔》透露出贝加尔湖的神秘、宁静。当然这也是我很喜欢的一首歌曲。最近在教孩子们pygame Zero模块,这个模块自1.2版本以后,有播放合成音效的能力.

tone.play(音符, 拍长)  # 音符例如"C4" "E#4" "Ab4"

音符代表 CDEFGAB 那些音乐的音符,有高有低 拍长以秒为单位, 如果我们的音乐节奏,也就是拍速是 60 bpm,也就是说每分钟有60拍,1拍对1秒,这样我们观察简谱的时候,就推算出每个音符的时长.

下面我在网上随便找一张《贝加尔湖畔》的简谱图,根据这幅简谱图,我编写出前4小节的数据谱.

[贝加尔湖畔简谱]

 

[运行结果]

 

 

 

 

 

 

 

 

#-- coding:utf-8 --

import pgzrun #导入游戏模块
import time

WIDTH = 600
HEIGHT= 200
BGcolor = 30, 80, 160 # R,G,B

# 映射简谱到音符
low2 = { 1:"C2", 2:"D2", 3:"E2", 4:"F2", 5:"G2", 6:"A2", 7:"B2"}
low1 = { 1:"C3", 2:"D3", 3:"E3", 4:"F3", 5:"G3", 6:"A3", 7:"B3"}
mid  = { 1:"C4", 2:"D4", 3:"E4", 4:"F4", 5:"G4", 6:"A4", 7:"B4"}
h1   = { 1:"C5", 2:"D5", 3:"E5", 4:"F5", 5:"G5", 6:"A5", 7:"B5"}
h2   = { 1:"C6", 2:"D6", 3:"E6", 4:"F6", 5:"G6", 6:"A6", 7:"B6"}

# 贝加尔湖畔
mymusic = ( (0, 0.25),(mid[6],0.125), (mid[7],0.125), (h1[1],0.25),(h1[5],0.25), (h1[4],1),
    (0, 0.25),(mid[5],0.125), (mid[6],0.125), (mid[7],0.25),(h1[4],0.25), (h1[3],1),
    (0, 0.25),(h1[3],0.125), (h1[3],0.125), (h1[6],0.375),(h1[5],0.125), (h1[4],0.25),(h1[2],0.5),(h1[1],0.25),
    (mid[7], 0.25), (h1[3],0.25), (h1[2], 0.375), (h1[1], 0.125), (mid[6], 1)
    )

def draw():
    screen.fill(BGcolor)
    screen.draw.text("Type any Key to start music.", center=(300, 100),fontsize=50)

def on_key_down(): # 按任意键播放
    for char,durtion in mymusic:
        dur = durtion * 2 # 控制整体快慢
        if char==0:
            time.sleep(dur)
        else:
            tone.play(char, dur)
            time.sleep(dur)
pgzrun.go()

有兴趣的同学可以把谱子补充完整.

课程体系
通知公告