本任务由以下子任务:
1,找一首你喜爱的歌曲的简谱。
2,熟悉童心派播放音乐的函数。
3,构造数据结构。
4,播放音乐。
5,完整点的示例代码
1,找一首你喜爱的歌曲的简谱。
2,熟悉童心派播放音乐的函数。
有了简谱,怎么播放呢?先看播放函数:
import cyberpicyberpi.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 cyberpicyberpi.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 cyberpit = 1notes = [[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
关注公众号“编程天地”,进一步了解如何学习编程语言:
**
