0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用Python写了一个自动弹钢琴脚本!

jf_TEuU2tls 来源:浩道linux 2023-09-10 10:21 次阅读

效果展示

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

3d71e616-4f7e-11ee-a25d-92fbcf53809c.gif

功能实现

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

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

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

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

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

代码实现

演奏函数

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

defplay_piano(music,keytime):
forninmusic:
ifn.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)
elifn=="|"orn==")":
pass
elifnin"!@$%^*(":
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)
elifn!=""andn!="-":
keyboard.press(n)
ifmusic.index(n)!=len(music)-1andmusic[music.index(n)+1]==")":
time.sleep(keytime/2)
else:
time.sleep(keytime)
keyboard.release(n)
elifn=="-":
time.sleep(2*keytime)
else:
time.sleep(keytime)

添加演奏旋律

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

准备演奏

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

right="s-asf|a--u|p-ops|"
"o--uu|i-uis-|u-sss|a-Iia|"
"a--|"
left="etu--|0wr--|qet--|"
"80w--|9qe--|80w--|7Qr--|"
"370Wr|"
thread_play(play_piano,0.3,right,left)
right="---op|s-asf|a--u|p-ops|"
"o--uu|i-uis-|u-sss|a-Iia|"
"a--pa|s-asf|a--u|p-ops|"
left="----|etu--|0wr--|qet--|"
"80w--|9qe--|80w--|7Qr--|"
"370Wru|etu--|0wr--|qet--|"
thread_play(play_piano,0.25,right,left)
right="o--uu|isa-s|dfs--|sapaO|"
"p--sd|f-dfh|d--o|s-asf|"
"f--oo|pasasd|s-oo-|dsap|"
left="80w--|9qe--|680--|9ey0-|"
"e---|89w-t|579--|60e-t|"
"370w-|q-q-|0---|9---|"
rightThumb="----|----|----|--W-|"
"s---|----|----|----|"
"----|----|----|gfds|"
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-sdh|"
"f--f|j-h-|"
left="3%70Wru|60e37w|48qerw|59qet|"
"80wty-|60e37w|"
rightThumb="f---|----|----|----|"
"----|----|"
rightIndexFinger="----|----|----|----|"
"----|----|"
leftThumb="----|----|----|----|"
"----|----|"
thread_play(play_piano,0.25,right,left,rightThumb,rightIndexFinger,leftThumb)
#右手
right="fds-s|d-sda|u--op|"
#左手
left="48qerw|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-asf|a--u|p-ops|"
"o--uu|i-uis-|u-sss|a-Iia|"
"a--|"
left="etu--|0wr--|qet--|"
"80w--|9qe--|80w--|7Qr--|"
"370Wr|"
thread_play(play_piano,0.4,right,left)

模拟演奏

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

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

if__name__=='__main__':
#准备演奏
##控制键盘
keyboard=Controller()
##切换到vue键盘钢琴(autopiano)网页
#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="GoogleChrome-1个运行窗口",auto_id="Chrome",
#control_type="Button").click()
chromePath=r'C:ProgramFilesGoogleChromeApplicationchrome.exe'
webbrowser.register('chrome',None,webbrowser.BackgroundBrowser(chromePath))
webbrowser.get('chrome').open('https://www.autopiano.cn',new=1,autoraise=True)

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


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 多线程
    +关注

    关注

    0

    文章

    278

    浏览量

    19946
  • python
    +关注

    关注

    56

    文章

    4793

    浏览量

    84635
  • 脚本
    +关注

    关注

    1

    文章

    389

    浏览量

    14860

原文标题:用Python写了一个自动弹钢琴脚本!

文章出处:【微信号:浩道linux,微信公众号:浩道linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于Python脚本的R语言的函数

    本文介绍了采用创建Python脚本脚本模仿R风格的函数的方法来方便地进行统计。 是
    的头像 发表于 10-12 09:33 2105次阅读
    基于<b class='flag-5'>Python</b><b class='flag-5'>脚本</b>的R语言的函数

    介绍10Python自动脚本

    在这个自动化时代,我们有很多重复无聊的工作要做。想想这些你不再需要一次又一次地做的无聊的事情,让它自动化,让你的生活更轻松。那么在本文中,我将向您介绍 10
    发表于 10-17 09:27 939次阅读

    10Python脚本来自动化你的日常任务

    今天浩道跟大家分享几个关于python自动化日常工作的实用案例脚本
    发表于 10-25 09:04 723次阅读

    10杀手级的Python自动脚本

    今天浩道跟大家分享10日常工作中用到的python自动脚本。让你感受python简单强大
    发表于 11-28 11:07 682次阅读

    梦幻钢琴

    ` 本帖最后由 3010203109 于 2013-3-31 14:34 编辑 *界面美观,多种音色,曲目丰富,可自动弹奏*游戏仿照钢琴而做,共有13键,音域从低音部的sol到高音部的mi
    发表于 10-12 20:02

    labview做的钢琴程序,可以修改,无密码

    可以用电脑弹钢琴钢琴完全labview做的,比较复杂。
    发表于 06-14 15:46

    python自动编写脚本及分配引脚

    对于具有484引脚的芯片,如果手动一个一个设置引脚,必然是场噩梦。网上有使用Capture进行自动导入的帖子,不过没有找到AD方面的帖子。本文使用
    发表于 07-23 06:49

    Arduino Uno板控制88螺线管弹钢琴

    块Arduino Uno板控制88螺线管弹钢琴
    发表于 12-02 14:57 0次下载

    基于Arduino的钢琴机器人

    块Arduino Uno板控制88螺线管弹钢琴。多年前,雅马哈推出了自动钢琴。年轻天真的我看到了乐器店的玻璃窗后面那架正在弹奏音乐的
    发表于 12-05 17:20 0次下载

    10杀手级的Python自动脚本分享

    重复性任务总是耗时且无聊,想想你想要张地裁剪 100 张照片或 Fetch API、纠正拼写和语法等工作,所有这些任务都很耗时,为什么不自动化它们呢?在今天的文章中,我将与你分
    的头像 发表于 01-06 15:34 750次阅读

    分享10实用的Python自动脚本

    重复性任务总是耗时且无聊,想想你想要张地裁剪 100 张照片或 Fetch API、纠正拼写和语法等工作,所有这些任务都很耗时,为什么不自动化它们呢?在今天的文章中,我将与你分
    的头像 发表于 01-21 15:58 1333次阅读

    利用Python写了监控服务器资源利用率的脚本

    研究了脚本,其主要目的是:基于 Python 编程语言来监控服务器的 CPU、内存、/目录、/appslog、/bigdata目录使用率以及网卡接收和发送情况。
    的头像 发表于 01-29 15:08 723次阅读

    怎么Python构建自动发送邮件的脚本

    ? 类似的应用场景还有很多,不仅仅是在股票策略提醒上,比如定时向某些人发送邮件;网站宕机了,实时发送邮件提醒;网站负载过高,发送邮件提醒......等等。 下面就来讲讲怎么Python构建
    的头像 发表于 10-21 14:47 753次阅读
    怎么<b class='flag-5'>用</b><b class='flag-5'>Python</b>构建<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>自动</b>发送邮件的<b class='flag-5'>脚本</b>

    怎么Python构建自动发送邮件的脚本

    呢? 类似的应用场景还有很多,不仅仅是在股票策略提醒上,比如定时向某些人发送邮件;网站宕机了,实时发送邮件提醒;网站负载过高,发送邮件提醒......等等。 下面就来讲讲怎么Python构建
    的头像 发表于 10-31 16:36 546次阅读
    怎么<b class='flag-5'>用</b><b class='flag-5'>Python</b>构建<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>自动</b>发送邮件的<b class='flag-5'>脚本</b>

    如何使用Python编写脚本来自动发送邮件

    Python种非常流行的编程语言,可以用于多种用途,包括自动化任务。其中常见的自动化任务
    的头像 发表于 12-07 11:36 1354次阅读