python自动化——使用pyautogui/pydirectinput+FreePiano实现自动弹《国际歌》

1 设计过程

1.1 发现的问题

刚开始打算使用pyautogui库实现键盘自动化,但发现pyautogui在一般的界面有效,但在FreePiano界面无效。

所以改用pydirectinput库进行实现

1.2 实现过程

  • step 1:导入time库,使用time.sleep(3)延迟3秒,方便代码运行后打开FreePiano软件。

  • step 2:把《国际歌》的谱写入列表中存储起来,元素用字符串的形式,如下:

image

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)

posted @ 2023-04-09 15:25  JaxonYe  阅读(681)  评论(0编辑  收藏  举报