【趣味编程】Python钢琴自动弹奏《月亮代表我的心》| 情人节特辑 程序员的浪漫

今天是情人节,是时候展现我们理工科的浪漫了。

用Python自动弹奏钢琴曲《月亮代表我的心》,让你身边的她(他)感动到哭。

源码和音频文件,已经为大家打包好了。有需要的朋友私信我,资源拿走不谢。

演奏功能基于Pygame实现。

首先设置一个字典,将do、re、mi、fa、sol等音符和音频文件名一一对应。然后根据《月亮代表我的心》的简谱,生成对应的字符串。再根据字符串的每个值,顺序调取音频文件,从而完成整个演奏。

安装Pygame

pip install pygame

随后,进入代码编写。分为以下几个模块:

一、设置音符字典

keyDict={'1':"c",'2':"d",'3':"e",'4':"f",'5':"g",'6':"a",'7':"b",'8':"c1",'9':"d1",'0':"e1",'q':"f1",'w':'g1','e':'a1','r':'b1','t':'c2','y':'d2','u':'e2','i':'f2','o':'g2','p':'a2','a':'b2','s':'c3','d':'d3','f':'e3','g':'f3','h':'g3','j':'a3','k':'b3','l':'c4','z':'d4','x':'e4','c':'f4','v':'g4','b':'a4','n':'b4','m':'c5'}

这里,字典的每个键都对应一个音符,对应关系参考auto piano。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57yW56iL5YWr54K55qGj,size_20,color_FFFFFF,t_70,g_se,x_16

二、初始化Pygame

pygame.init()pygame.mixer.init()bg_size = width, height = 796, 448background=pygame.image.load(r"resize.jpg")screen = pygame.display.set_mode(bg_size)screen.blit(background,(0,0))pygame.display.update()pygame.display.set_caption("编程八点档")pygame.mixer.set_num_channels(32)

设置窗口大小,并导入图片作为界面背景。

三、生成音符字符串

根据简谱,生成音符字符串,顺序调取音频文件,完成演奏。

为了模拟左右手演奏,这里采用了多线程。

right = "o|s  fh   s|a  fh  h|j  kl  j|h --fd|s  ss fd|s  ss df|d  sp df|"left = " |8w8wuwtw|3707w707|48q8e8q8|59wryoyr|8wtwuwtw|60e0t0e0|9eyeieye|"thread_play(play_, 0.4, right, left)
def thread_play(play_, keytime, right, left):rt = threading.Thread(target=play_, args=(right, keytime))lt = threading.Thread(target=play_, args=(left, keytime))rt.start()lt.start()rt.join()lt.join()
def play_(music, keytime):for n in music:if n == "|" or n == ")":passelif n in "!@$%^*(":time.sleep(0.001)elif n != " " and n != "-":if n in keyDict.keys():pygame.mixer.Sound("audios/" + keyDict[n] + ".wav").play(maxtime = 1500)if music.index(n) != len(music) - 1 and music[music.index(n) + 1] == ")":time.sleep(keytime / 2)else:time.sleep(keytime)elif n == "-":time.sleep(2 * keytime)else:time.sleep(keytime)

到此,自动弹奏钢琴的核心部分已经完成。附个链接,戴上耳机,感受下完整的演奏效果吧。

python自动演奏钢琴曲《月亮代表我的心》

祝大家情人节快乐,有情人终成眷属。

需要完整源码和音符文件的同学,私信我,我会第一时间回复大家。

更多趣味编程和Python入门知识,欢迎关注b站:编程八点档,给你有趣有料的编程知识。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值