python自动化——使用pyautogui/pydirectinput+FreePiano实现自动弹《国际歌》
1 设计过程
1.1 发现的问题
刚开始打算使用pyautogui库实现键盘自动化,但发现pyautogui在一般的界面有效,但在FreePiano界面无效。
所以改用pydirectinput库进行实现
1.2 实现过程
-
step 1:导入time库,使用time.sleep(3)延迟3秒,方便代码运行后打开FreePiano软件。
-
step 2:把《国际歌》的谱写入列表中存储起来,元素用字符串的形式,如下:
note = ["t", "space", "1", "space", "u", "2", "1", "t", "e", "y", "space", "r", # 起来饥寒交迫的奴隶
"space", "space", "y", "space", "2", "space", "1", "u", "y", "t", "r", "e", # 起来全世界受苦的人
"space", "space", "t", "1", "space", "u", "2", "1", "t", "e", "y", "space", "r", # 满腔的热血已经沸腾
"space", "space", "y", "2", "1", "u", "2", "4", "u", "1", # 要为真理而斗争
"space", "space", "3", "2", "u", "space", "y", "u", "1", "y", "u", "t", # 旧世界打个落花流水
"space", "space", "t", "r", "t", "y", "y", "2", "1", "u", # 奴隶们起来起来
"space", "space", "2", "space", "2", "space", "u", "t", "t", "r", "t", "3", "1", # 不要说我们一无所有
"space", "space", "y", "u", "1", "u", "2", "1", "y", "t", # 我们要做天下的主人
"space", "space", "3", "2", "1", "t", "e", "y", "r", # 这是最后的斗争
"space", "space", "2", "1", "u", "y", "t", "t", # 团结起来到明天
"space", "space", "t", "3", "2", "t", "1", "u", # 英特纳雄耐尔
"space", "u", "y", "t", "y", "2", "2", # 就一定要实现
"space", "space", "3", "2", "1", "t", "e", "y", "r", # 这是最后的斗争
"space", "space", "2", "1", "u", "y", "t", "3", # 团结起来到明天
"space", "space", "3", "5", "4", "3", "2", "3", "4", # 英特纳雄耐尔
"space", "4", "3", "3", "2", "2", "1", # 就一定要实现
"space", "space", "3", "5", "4", "3", "2", "3", "4", # 英特纳雄耐尔
"4", "3", "3", "2", "2", "1", # 就一定要实现
]
-
step 3:使用for循环读取列表内容,使用pydirectinput.press()函数模拟键盘按下按键进行弹奏,如下:
for i in note: time.sleep(0.1) pydirectinput.press(i)
2 整体代码如下
"""
利用鼠标和键盘自动化+FreePiano实现自动弹钢琴。
完成上述代码功能,同时完成较为详细的软件设计文档(最终提交pdf即可),文档包括设计思路、关键代码解释、演奏效果录视频或音频文件。以上文件打包,上传到CG系统。
禁止学术不端行为。
"""
"""
pyautogui在freepiano不起作用,改用pydirectinput库
"""
import pyautogui
import time
import pydirectinput
time.sleep(3)
note = ["t", "space", "1", "space", "u", "2", "1", "t", "e", "y", "space", "r", # 起来饥寒交迫的奴隶
"space", "space", "y", "space", "2", "space", "1", "u", "y", "t", "r", "e", # 起来全世界受苦的人
"space", "space", "t", "1", "space", "u", "2", "1", "t", "e", "y", "space", "r", # 满腔的热血已经沸腾
"space", "space", "y", "2", "1", "u", "2", "4", "u", "1", # 要为真理而斗争
"space", "space", "3", "2", "u", "space", "y", "u", "1", "y", "u", "t", # 旧世界打个落花流水
"space", "space", "t", "r", "t", "y", "y", "2", "1", "u", # 奴隶们起来起来
"space", "space", "2", "space", "2", "space", "u", "t", "t", "r", "t", "3", "1", # 不要说我们一无所有
"space", "space", "y", "u", "1", "u", "2", "1", "y", "t", # 我们要做天下的主人
"space", "space", "3", "2", "1", "t", "e", "y", "r", # 这是最后的斗争
"space", "space", "2", "1", "u", "y", "t", "t", # 团结起来到明天
"space", "space", "t", "3", "2", "t", "1", "u", # 英特纳雄耐尔
"space", "u", "y", "t", "y", "2", "2", # 就一定要实现
"space", "space", "3", "2", "1", "t", "e", "y", "r", # 这是最后的斗争
"space", "space", "2", "1", "u", "y", "t", "3", # 团结起来到明天
"space", "space", "3", "5", "4", "3", "2", "3", "4", # 英特纳雄耐尔
"space", "4", "3", "3", "2", "2", "1", # 就一定要实现
"space", "space", "3", "5", "4", "3", "2", "3", "4", # 英特纳雄耐尔
"4", "3", "3", "2", "2", "1", # 就一定要实现
]
for i in note:
time.sleep(0.1)
pydirectinput.press(i)
本文来自博客园,作者:JaxonYe,转载请注明原文链接:https://www.cnblogs.com/yechangxin/articles/17300371.html
侵权必究