python讨论qq群:996113038
导语:
小编以前学过竹笛,很喜欢笛子的声音,清越悠长,活泼欢快。前几天突然来了灵感。
于是,我就开发了一个专门用python模仿竹笛演奏乐曲的程序。我上网查询过很多次,现在网络上基本没有这种类型的程序,于是,我们公众号就来做第一个吃螃蟹的公众号。
提醒一下,看懂这一节需要一些起码的乐理知识,最起码,最最基本的简谱要能看懂。
不过看不懂也没关系,我会给大家补习一下音乐课。
代码及相关资源获取:
1:关注“python趣味爱好者”公众号,回复“ 女儿情 ”获取源代吗。
2:加入群聊:996113038。在群文件中下载源代码以及相关资料。
开发工具:
python3.6.4
相关第三方库:
os
pygame
sys
re
效果演示:
演奏效果如下:
基本原理:
简谱介绍:
竹笛演奏时需要简谱。上面就是我截取的简谱的一部分,前面的“啊,啊”前奏我们直接省略。从“5612376756”开始,这些数字其实就是“哆来咪发少拉西”。数字下面有“点”代表低音。上面有“点”代表高音,没有“点”代表中音。
如果数字下面有一个横线,代表这是8分音符,两个横线代表16分音符如果没有横线代表4分音符(这里就是1秒)。
8分音符是0.5s。数字后面的横线代表把前面的音符重复一遍。
不知道大家听懂没有!反正乐理就讲到这里了。
下面开始讲程序的原理,我录下来笛子的不同指法的声音。用一个数据库表示。
其中h代表高音,123....代表音符。“_”后面的数字代表几分音符。
我们输入将简谱翻译成这样的字符串。存储在列表里。播放的时候按照顺序播放,于是音乐就播放出来了。
播放时间通过delay精确控制。但是因为原始音频时间长短不一。还是存在“卡”的情况。希望在以后的版本中能修改好。
往期精选:
部分代码:
下面讲解一下代码:‘
music1=[
'l5_8','l6_8','m1_4','m1_8','m2_8','m3_8','l7_16','m6_16','l7_16','l5_8','l6_4','l6_4'
]
’上面的代码是我们将“鸳鸯双栖蝶双飞”的简谱。这是第一句。
我们所有的简谱全部连接起来,按顺序播放。
连接简谱的代码就是简单的加在一起。
music=music1+music2+music3+music4+music5+music6
由于我们是用pygame播放音乐,所以我们还要生成一个窗口(pygame的功能必须有窗口才能调用)。
from pygame.locals import*
pygame.mixer.init()
pygame.display.set_mode([30,30])
以后的主函数是按顺序播放music_n里面的所有音符,music.play()
for name in music_n:
index1 = scale_name.index(name)
music=scale_list[index1]
music.play()
pygame.time.delay(int(dict1[name[3]]))
感谢大家观看,有钱的老板可以打赏一下小编哦!
扫描下方二维码,关注公众号
参考资料:无