用 Python 写了一个自动弹钢琴脚本,轻松弹奏出各种钢琴曲!

9dd5c339224ab6f55fa59039cb1db594.png

(永久免费,扫码加入)

来源丨网络

事情是这样的,女神马上要毕业了,前两天跟我彻夜长谈,还说自己一直有个钢琴家的梦想。

这不为了帮女神圆梦,在我经过一番苦思冥想之后,终于用Python写了一个自动弹钢琴脚本,不会钢琴的都能成为钢琴家。

效果展示

我们先来看看最终实现效果

674d386bee319c31b3774ba3feafcd14.gif

功能实现

总体的实现相对是比较简单的,主要分为以下4步实现:

  • 实现演奏函数,通过手指及时间间隔模拟弹钢琴

  • 添加各个演奏旋律线程,通过多线程模拟双手演奏效果

  • 确定需要演奏的钢琴乐谱,确认主旋律、和弦、右手拇指、右手食指、左手拇指、左手食指

  • 自动切换打开键盘钢琴(autopiano)网页,通过键盘键入实现模拟演奏功能

代码实现

演奏函数

首先需要模拟出演奏时各个按键的停顿间隔时间,实现键盘控制,通过传入的音乐乐符和时间实现各个现场手指的演奏。

def play_piano(music, keytime):for n in music:if n.isupper():keyboard.press(Key.shift)time.sleep(0.001)keyboard.press(n.lower())time.sleep(keytime - 0.001)keyboard.release(n.lower())keyboard.release(Key.shift)elif n == "|" or n == ")":passelif n in "!@$%^*(":keyboard.press(Key.shift)time.sleep(0.001)keyboard.press("1245689"["!@$%^*(".index(n)])time.sleep(keytime - 0.001)keyboard.release("1245689"["!@$%^*(".index(n)])keyboard.release(Key.shift)elif n != " " and n != "-":keyboard.press(n)if music.index(n) != len(music) - 1 and music[music.index(n) + 1] == ")":time.sleep(keytime / 2)else:time.sleep(keytime)keyboard.release(n)elif n == "-":time.sleep(2 * keytime)else:time.sleep(keytime)

添加演奏旋律

音乐弹奏的时候,有时候需要双手同时控制演奏,我们需要通过线程模拟出主旋律、和弦、右手拇指、右手食指、左手拇指、左手食指各个部分的演奏效果,通过多线程开启上面的演奏函数。

准备演奏

双手弹琴需要确认好整首音乐中各个手指的弹奏节奏和弹奏内容。需要模拟出各个阶段需要的演奏音乐并拼出整首音乐。

right = "s-as f |a --u |p -ops |" \"o --uu|i-uis-|u - sss|a-Ii a |" \"a --|"
left = "etu --|0wr --|qet --|" \"80w --|9qe --|80w --|7Qr --|" \"370Wr |"
thread_play(play_piano, 0.3, right, left)
right = "---op|s-as f |a --u |p -ops |" \"o --uu|i-uis-|u - sss|a-Ii a |" \"a --pa|s-as f |a --u |p -ops |"
left = "----|etu --|0wr --|qet --|" \"80w --|9qe --|80w --|7Qr --|" \"370Wr u |etu --|0wr --|qet --|"
thread_play(play_piano, 0.25, right, left)
right = "o --uu|i sa-s |d fs--|sap a O |" \"p --sd|f-df h |d --o |s-as f |" \"f --oo|pas asd |s-oo- |d s a p |"
left = "80w --|9qe --|680 --|9ey 0 -|" \"e ---|89w -t |579 --|60e -t |" \"370 w -|q -q -|0 ---|9 ---|"
rightThumb = "----|----|----|--W -|" \"s ---|----|----|----|" \"----|----|----|g f d s |"
rightIndexFinger = "----|----|----|--r -|" \"u ---|----|----|----|" \"----|e -r -|w ---|e ---|"
leftThumb = "----|----|----|----|" \"----|----|----|----|" \"----|t -y -|t ---|t ---|"
thread_play(play_piano, 0.25, right, left, rightThumb, rightIndexFinger, leftThumb)
right = "a --f |j -h -|fds -s |d-sd h |" \"f --f |j -h -|"
left = "3 %70Wru|60e 37w |48qer w |59q e t |" \"80wty -|60e 37w |"
rightThumb = "f ---|----|----|----|" \"----|----|"
rightIndexFinger = "----|----|----|----|" \"----|----|"
leftThumb = "----|----|----|----|" \"----|----|"
thread_play(play_piano, 0.25, right, left, rightThumb, rightIndexFinger, leftThumb)
# 右手
right = "fds -s |d-sd a |u --op|"
# 左手
left = "48qer w |7 -7 % |6 ---|"
# 右拇指
rightThumb = "----|9 ---|8"
# 右食指
rightIndexFinger = "----|q ---|0"
# 左拇指
leftThumb = "----|----|p"
# 多线程模拟手指弹琴,按键时间为0.3s
thread_play(play_piano, 0.3, right, left, rightThumb, rightIndexFinger, leftThumb)
right = "s-as f |a --u |p -ops |" \"o --uu|i-uis-|u - sss|a-Ii a |" \"a --|"
left = "etu --|0wr --|qet --|" \"80w --|9qe --|80w --|7Qr --|" \"370Wr |"
thread_play(play_piano, 0.4, right, left)

模拟演奏

最后只需要打开钢琴网页,通过控制键盘按键,实现手指演奏曲谱线程,就可以模拟弹奏出整首音乐了。

这里我们需要安装谷歌浏览器驱动,来实现自动打开浏览器。

if __name__ == '__main__':# 准备演奏# # 控制键盘keyboard = Controller()# # 切换到vue键盘钢琴(auto piano)网页# keyboard.press(Key.cmd)# time.sleep(1)# keyboard.press("d")# keyboard.release("d")# keyboard.release(Key.cmd)# # 链接的方式点击桌面任务栏的正在运行程序print_control_identifiers()# dlg = Desktop(backend="uia").任务栏.运行中的程序.child_window(title="Google Chrome - 1 个运行窗口", auto_id="Chrome",#                                                      control_type="Button").click()chromePath = r'C:\Program Files\Google\Chrome\Application\chrome.exe'webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chromePath))webbrowser.get('chrome').open('https://www.autopiano.cn', new=1, autoraise=True)

到这里自动弹钢琴就实现完成了,如果需要实现别的钢琴演奏,只需要会看乐谱,根据乐谱修改各个阶段手指弹奏线程,就可以实现不同乐曲的钢琴演奏啦!


最后推荐一下我们的会员群,目前有风投天使投资人,猎头HR,抖音大V,情感博主,律师,心理咨询师,医疗销售,地产,保险,钢琴老师,运营商,企业咨询,跨境电商,建筑,互联网行业的数据分析师,后端开发,python测试等行业的同学加入。

微信咨询:coder_v5 (务必备注你的来意)


性价比超高的星球

目前星球420+人,专栏的内容秘籍已经更新了41篇,每天都有星球发布自己心得。只花一份钱可以学:

Python : python 入门课程44节+Django专栏9节+趣味实战案例

chatgpt :入门,进阶,趣味办公,高级课程

AI绘画:Mj的基础,入门,进阶,小红书玩法

如果你想学Python,又想学ChatGPT,又想学AI绘画,只想花一份钱欢迎加入我们星球会员群,还能认识很多牛人!

加入就送ChatGPT独立账号

92c63f13c39358f452484b7923203caa.jpeg

另外还送ChatGPT高级视频课程

原价99,现在免费送星球会员

8f6dac7f7a791c19f1d93119e020fc0a.jpeg

微信长按试看内容

三天内不满意可直接退款!!!

78fd285b1a73b2c4254f6cc6b31df5dd.png

推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14369.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

近期微软重大论文----《通用人工智能的火花:GPT-4的早期实验》

这篇论文是最近讨论度极高的一篇论文,推特上几乎被这篇论文刷屏,作者Sebastien Bubeck是微软机器学习基础组的研究经理。他本人之前的研究主要集中在机器学习理论,凸优化,对抗鲁棒性方法,下面是该大佬的个人主页&#…

《分布式人工智能系统》讲习班开始报名|CCF ADL

深度学习正以“软件2.0”的姿态进入到AIGC、生物制药、新材料以及科学计算等领域。这些领域的模型规模越来越大,尤其以ChatGPT为代表的大模型层出不穷,但由于算力增速不足、分布式编程门槛高,分布式人工智能系统成为产学两界共同关注的焦点。…

东数西算与城市算力网发展 | CCDE2023专题论坛

近年来,算网融合已得到ICT、超算、金融等多领域的高度认同,被广泛视为加速产业数字化升级演进的重要抓手。论坛的主题报告围绕“东数西算”和城市算力网发展中算力、网络、大数据和运营等核心问题展开,联合多位院士发起,邀请政府、…

JSP住宅小区物业管理系统(源代码+开题报告+论文+答辩PPT)

详情介绍 小区物业管理毕业设计 (论文) 目 录 摘要——————————————————————————————–1 ABSTRACT———————————————————————————–2 第1章 绪论—————————————————————…

GitHub 前 CTO 再创业,起步便获 2600 万美元投资,唯一竞争对手只有 OpenAI!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 对于技术人而言,哪有什么真正的退休,不再玩技术的,往往有的也只是说得到,做不到: 2011 年,金山软件创始人、董事长兼 CEO 求伯君宣…

net::ERR_CONNECTION_TIMED_OUT 微信小程序 解决办法

解决办法:查看是否IP地址有误 将查到的ip地址复制到微信小程序以下位置

奇点来临,GPT-4发布!ChatGPT大升级!太太太太强了,见证历史!

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号,领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇:ChatGPT研究框架(80页PPT,附下载)…

AutoGPT,AI新晋太子?一觉醒后ChatGPT 被淘汰了

近日,AI 界新概念:自主人工智能。横空出世 这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。 特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬: 「AutoGPT 是 pro…

解决office 2019打开word、excel慢的问题

一、背景   前几天安装了一个office2019,安装完成以后打开word文档, excel表格速度都很慢。卡在那1分钟都不动。就寻找了下解决方案,于是各种百度,也都是吐槽,没有给出完整的解决方案。下面我将解决方案分享一下。 二…

解决使用Microsoft Office Word每次从后台切回后都出现卡顿一下问题

卡顿就是PowerDesigner的COM组件导致的。 解决方案: 1.打开word选项,加载项点击转到 2. 取消掉PowerDesigner的插件即可 3.再也不卡顿了,很好,卡了很久真是烦死了。

office加载MathType导致启动超慢解决办法记录

前一阵升级到了win11,结果不知为啥word打开时候加载特别慢,原因是mathType7加载慢(打开的时候word上边弹出该加载项加载时间过长的提醒,问是否要把mathTypeCommands.2016.dotm禁用掉)。 网上查都说直接把mathtype禁用…

Win10 运行Office2016变慢解决方法

Win10 运行Office2016变慢解决方法 win10升级后,发现office2016运行很慢,即使新建文件都很慢,搞得人很烦。网上找了很多,基本都是针对之前的版本,在2016上没有什么用。最后使用office修复,是可以解决&…

ONLYOFFICE中的chatGPT是怎样提升工作效率的

几乎一夜之间chatGPT火遍国内外网络,作为一个总是努力提高工作效率并在一天内完成更多工作的人,我很高兴发现 ONLYOFFICE添加了ChatGPT — 一个人工智能驱动的聊天机器人,可以帮助您管理时间、设定目标并改善您的个人和职业生活。 ONLOYOFFIC…

解决office一打开就显示正在更新,过一会就报错的问题

问题描述: 一打开office就显示正在更新,请稍后,过一会就弹窗报错。 解决方案: 1.winR输入services.msc 2.将Microsoft Office即点即用服务设为自动 如果第二步中已经是自动状态,先禁用一下,再重新设置为…

Word打字很卡顿 Office打字时反应慢 延迟 Excel输入迟钝 PPT卡死的终极解决办法大全(24种方法)

本文由 简悦 SimpRead 转码, 原文地址 zhuanlan.zhihu.com 经过 2 天的搜索及尝试 及不断更新,总共收集了 20 多种方法,肯定有一种方法适合你。一定可以一劳永逸解决你的打字卡顿的问题 Word 文档 Excel 表格 PPT 演示是 Office 办公软件中最…

Office 2013 Excel 打开文档很慢很慢的解决方法

这几天打开excel文档很慢很慢,双击之后好久没反应,过会儿它才慢慢冒出来,当时将就了,刚刚休息的时候想着查一下吧,不然很影响工作效率!!! 查的过程中发现有人说在开始菜单打开就很快…

(亲测解决)微软Office2016打开卡顿、缓慢解决方法

目录 一、问题描述 二、问题解决 2.1 Excel 2.1.1 基本设置 2.1.2 修改注册表 一、问题描述 1.WPS处理大型文件时显得力不从心,所以安装了office2016,但是在打开新版的Office的Excel、PowerPoint、Word时发现启动特别慢,有时候需要十几秒…

Word、Excel、PPT软件打开关闭时很慢(卡顿)的一种解决方法

原因可能是COM加载项过多,可以通过去除多余COM加载项解决。 操作方法: 1. 在软件中点击“文件”选项,之后点击“选项”按钮。 2. 在Word选项中点击“加载项”按钮,之后选择COM加载项,最后点击“转到”按钮。 3. 将不…

office2016 excel、word打开缓慢,编辑卡顿问题

今天遇到excel2016打开缓慢,excel、word打开后编辑卡顿,延时 在网上找了很多文档,都没有解决,以下提供解决问题的方式,供君参考,希望可以提供帮助 第一种方式: 在桌面新建一个空白的excel文档…

在Office的Excel中打开WPS很慢

在工作中,往往会用到Excel,有时候在用Excel打开WPS时,即便是一个非常小的文件,也会非常卡,千万不要怀疑自己的电脑,这个是两个软件之间的不兼容导致的。 下面总结了几个方法,可以参考 1、利用…