首页 » 排名链接 » 用python写个自动弹钢琴的脚本(编辑器演奏模拟拇指弹奏)

用python写个自动弹钢琴的脚本(编辑器演奏模拟拇指弹奏)

萌界大人物 2024-11-04 11:30:46 0

扫一扫用手机浏览

文章目录 [+]

功能实现

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

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

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

用python写个自动弹钢琴的脚本(编辑器演奏模拟拇指弹奏) 排名链接
(图片来自网络侵删)

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

自动切换打开键盘钢琴(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.3sthread_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)

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

腾讯云服务器1年112,2C2G4M 复制链接或者点阅读原文

https://url.cn/0LMFe5AG

波哥

IT行业近二十年的IT老炮。
常年潜伏于国企、各一二线大厂中。
硬件集成入行,直至虚拟技术、容器化。
岗位历经系统集成、DBA、全栈开发、sre、项目经理、产品经理、部门总监。

主要作品:

IT类资源汇聚门户:https://www.98dev.com

各大短视频平台:98dev

各大主要技术论坛博客:IT运维技术圈

长视频教学作品:《波哥讲网络》《波哥讲git》《波哥讲gitlab》

小程序:IT面试精选

构建技术社区:+V itboge1521 入学习交流群

相关文章