【趣味编程】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。
二、初始化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站:编程八点档,给你有趣有料的编程知识。
【趣味编程】Python钢琴自动弹奏《月亮代表我的心》| 情人节特辑 程序员的浪漫相关推荐
- python青少年趣味编程-青少年趣味编程Python系列课程--2018-07-17
青少年趣味编程Python系列课程--2018-07-17 一.系列课程介绍 1.python入门(面向零基础12岁以上的小朋友)--将python基础与python游戏设计结合进行讲解 (1).父与 ...
- flash钢琴自动弹奏之Windows Script实现版
flash钢琴,网上有很多,swf版,exe版都有.弹着挺有趣.就是难度高的,弹来弹去都比较难找到感觉,需要听听原曲或者让flash钢琴自动弹奏一下听听. 在windows平台因为有WScript组件 ...
- 用键盘8个键演奏一首蒲公英的约定送给996的自己或者一首月亮代表我的心给七夕的她...
点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 这个项目仅仅用了几个简单的前端技术实现,献给每一位挚爱音乐的代码家???? 如果你喜欢或者对你有帮助,给我点个赞支持下吧?? ...
- 用键盘8个键演奏一首蒲公英的约定送给自己或者一首月亮代表我的心送给她
体验地址: https://wscats.github.io/piano/build/ 项目地址: https://github.com/Wscats/piano 用键盘8个键演奏一首蒲公英的约定送给 ...
- 月亮代表我的心计算机谱子,月亮代表我的心
月亮代表我的心 作词:孙仪 作曲:汤尼 演唱(奏):邓丽君 格式:简谱 来源:<中国曲谱网> 上传:秋叶起舞 日期:2010-03-05 浏览次数: 发送到我的邮箱打包下载全屏查 ...
- 月亮代表我的心计算机谱子,月亮代表我的心(超简单) C调钢琴谱
月亮代表我的心(超简单) C调钢琴谱该歌谱演奏者为未知,歌曲名称为月亮代表我的心,歌谱类型为钢琴谱.月亮代表我的心(英语翻译为:The Moon Represents My Heart),经典歌曲,歌 ...
- 全球最厉害最有钱的24位顶尖程序员及其代表项目(公号回复“顶尖程序员”下载PDF资料)
全球最厉害最有钱的24位顶尖程序员及其代表项目(公号回复"顶尖程序员"下载PDF资料) 原创: 秦陇纪 数据简化DataSimp 今天 数据简化DataSimp导读:全球最厉害最有 ...
- python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !
没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...
- python浪漫代码-使用Python代码的程序员也浪漫
原标题:使用Python代码的程序员也浪漫 代码也浪漫:用Python放一场圣诞节烟花秀! 天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法 ...
最新文章
- Scala _02基础
- php mysql书城_php在线书城 thinkphp源码(含数据库脚本)
- 黑客开始利用云计算暴力破解密码
- ajax默认什么方法,ajax设置默认值ajaxSetup()方法
- 排序上---(排序概念,常见排序算法,直接插入,希尔排序,直接选择排序,堆排序)
- 计算机教学理论研究,计算机辅助教学理论实践研究.doc
- 每日一题(53)—— 评价代码片段
- java对docker_如何在docker中运行java程序
- php 和风天气,【原创】彩云/和风天气插件
- Composer基础应用1
- 怎么通过当地时区计算格林尼治_时间规划局:时间能看到,标注在你的手臂上,那时的你会怎么样...
- laravel安装指定版本
- 一个迷你音频播放器项目
- Mace-micro引擎编译与测试
- matlab 统计数组频数_matlab如何找出一个数在数组中出现次数
- anaconda自动安装jupyter后打开E盘
- Jetpack Compose(一):Text
- matlab如何提取某一列的数据_MATLAB如何提取某一矩阵的某一列的部分数据?
- 微信JSAPI支付实现
- bp神经网络分类器c语言,基于BP神经网络的隐写分析分类器设计
热门文章
- 全国大学生一级计算机考试,全国大学生计算机一级考试模拟试题.
- poi tl 判断空值_POI中文API文档
- 上海2020计算机考研分数线,上海交通大学2020考研复试分数线已公布
- 通信/信号处理推荐书籍与资料
- mysql数据库形式任务_数据库未来可能的研究方向
- 《乔布斯传记》读后感(二)
- redeclared with a different type
- 耶鲁大学《博弈论》课程——逆向归纳
- css之前端5种布局方式之table布局、float布局、absolute布局、flexbox布局、grid布局
- oracle 存储过程中 truncate,procedure中truncate other schema’s table