《贝加尔湖畔》透露出贝加尔湖的神秘、宁静。当然这也是我很喜欢的一首歌曲。最近在教孩子们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()
有兴趣的同学可以把谱子补充完整.


