本任务由以下子任务:
1,找一首你喜爱的歌曲的简谱。
2,熟悉童心派播放音乐的函数。
3,构造数据结构。
4,播放音乐。
5,完整点的示例代码

1,找一首你喜爱的歌曲的简谱。

大家先用下面这个简谱,熟悉以后再找其他的。
image.png

2,熟悉童心派播放音乐的函数。

有了简谱,怎么播放呢?先看播放函数:
import cyberpi
cyberpi.audio.play_music(note, beat, type = "piano")参数:

  • type str,有效范围为"piano",表示设定的演奏乐器。一般省略。
  • note int,有效范围为 0~132,表示乐器弹奏声音的频率高低,音符和参数值的关系见下面表1。
  • beat float,有效范围为大于 0 的数值,单位为 表示该音符播放的时长。在正常的播放速度下,1 拍的时长为 1s。

do re mi我们按照以下的高低来取值,例如do取60:
# 简谱/音符/MIDI序号
# 1 C4 60
# 2 D4 62
# 3 E4 64
# 4 F4 65
# 5 G4 67
# 6 A4 69
# 7 B4 71
假设我要播放do(1)0.5秒,就这么调用就能播放1音0.5秒:
import cyberpi
cyberpi.audio.play_music(60, 0.5)

表1:其他音高参考下面这个表,有兴趣的同学自己研究。note 取值与音符的对应关系**
note 取值 对应的音符 note 取值 对应的音符 note 取值 对应的音符
0 C-1 43 G2 86 D6
1 C#-1 44 G#2 87 D#6
2 D-1 45 A2 88 E6
3 D#-1 46 A#2 89 F6
4 E-1 47 B2 90 F#6
5 F-1 48 C3 91 G6
6 F#-1 49 C#3 92 G#6
7 G-1 50 D3 93 A6
8 G#-1 51 D#3 94 A#6
9 A-1 52 E3 95 B6
10 A#-1 53 F3 96 C7
11 B-1 54 F#3 97 C#7
12 C0 55 G3 98 D7
13 C#0 56 G#3 99 D#7
14 D0 57 A3 100 E7
15 D#0 58 A#3 101 F7
16 E0 59 B3 102 F#7
17 F0 60 C4 103 G7
18 F#0 61 C#4 104 G#7
19 G0 62 D4 105 A7
20 G#0 63 D#4 106 A#7
21 A0 64 E4 107 B7
22 A#0 65 F4 108 C8
23 B0 66 F#4 109 C#8
24 C1 67 G4 110 D8
25 C#1 68 G#4 111 D#8
26 D1 69 A4 112 E8
27 D#1 70 A#4 113 F8
28 E1 71 B4 114 F#8
29 F1 72 C5 115 G8
30 F#1 73 C#5 116 G#8
31 G1 74 D5 117 A8
32 G#1 75 D#5 118 A#8
33 A1 76 E5 119 B8
34 A#1 77 F5 120 C9
35 B1 78 F#5 121 C#9
36 C2 79 G5 122 D9
37 C#2 80 G#5 123 D#9
38 D2 81 A5 124 E9
39 D#2 82 A#5 125 F9
40 E2 83 B5 126 F#9
41 F2 84 C6 127 G9
42 F#2 85 C#6

3,构造数据结构。

怎么播放一句呢?要每个音符都写一行cyberpi.audio.play_music吗?不需要,我们已经系统地学了Python,用循环就可以了啊,怎么用循环呢?
首先定义一个list,list的元素为包含2个元素的小list:
t = 1
notes = [[57, t0.5], [60, t0.5], [62, t0.5], [64, ,t1.5], [67,t0.5], [64, t0.5], [60,, t0.5 ], [62, t], [57, t2]]
说明:例如[57, t0.5],第一个57是音高,第二个t0.5是时长,我们假设一拍1秒,那半拍就是t*0.5。
为什么用t,因为一旦发现时长太长太短,就可以修改t就好了,不要一个一个修改了。

4,播放音乐。

然后使用循环播放:
for n in notes:
cyberpi.audio.play_music(n[0], n[1])
简单吧!这然是为什么要大家听课后要认真完成编程题原因,我们要用数据结构,要用算法,要避免重复代码,现在用上了。

5,完整点的示例代码

以下仍然是老师的示例代码,调试通过以后,请同学们自己来继续完善。
import cyberpi
t = 1
notes = [[57, t*0.5], [60, t*0.5], [62``, t*0.5``], [64, ``,t*1.5``], [67,t*0.5], [64, t*0.5], [60,``, t*0.5`` ], [62, t], [57, t*2]]
for n in notes:
**cyberpi.audio.play_music(n[0], n[1])****
如果你不想完善,做到这里播放出来,理解老师的代码为什么这么写也够了。


学习Python编程,请到:http://www.fatanxi.com/training/index.htm
关注公众号“编程天地”,进一步了解如何学习编程语言:
借助童心派促进Python学习任务3:童心派唱让我们荡起双桨 - 图2

**