谁在用 python 弹奏一曲《菊花台》

博主在家中尝试用手机app弹奏《菊花台》,发现自己手速跟不上,于是决定利用Python操控键盘来实现。通过DD虚拟键盘软件,结合Python调用dll文件,模拟按键实现音乐演奏。文中详细介绍了实现过程,并分享了代码、曲谱和软件资源。
摘要由CSDN通过智能技术生成

想必各位在家已经闲得快发疯了吧,鄙人现在的状态如下:

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfMjE=,g_se,x_0,y_0,t_100

但是我不想这么萎靡下去,我想做点高雅的事情,看到朋友圈有人在手机app上弹《菊花台》,简直太好听了。于是乎我也开始蠢蠢欲动,迅速下载app,对着谱子弹了起来。

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjI=,g_se,x_0,y_0,t_100

等等,我怎么感觉我的手速跟不上我的脑子,好怕邻居说我扰民啊

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfMjE=,g_se,x_0,y_0,t_100

算了,我还是放弃吧,毕竟我没有这个艺术细胞。突然我灵机一动,咱也是算玩Keyboard(打字的键盘和乐器的琴键都是同一个单词)的,不行就用python来操作吧!

刚开始我想的很简单,只需要下载个弹琴软件(我用的FreePiano),然后用python操控键盘就OK了,但是马上就被打脸了,因为python的pyautogui、pynput等操控键盘鼠标的库根本无法弹出来声音,需要用python操控驱动级键盘才有用!这可难倒老夫了……

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfMjY=,g_se,x_0,y_0,t_100

我开始疯狂搜索,终于找到了解决办法,可以先下载1个虚拟键盘,然后用python来操控虚拟键盘,那么这个问题就迎刃而解了。

我找了个叫做DD虚拟键盘的软件,这是一款开源的虚拟键盘,可以通过程序来操控,软件压缩包可以在官方qq群里可以下载,内含python、Java、c等多种示例程序。

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjk=,g_se,x_0,y_0,t_100

打开压缩包,有以下文件

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjI=,g_se,x_0,y_0,t_100

记住压缩包存在的位置,后续有用。

下面开始介绍如何用python操控DD虚拟键盘:

1. 调用dll文件

#改成你自己的路径
dddd_dll = windll.LoadLibrary('DD94396官方公版\DD94687.64.dll')

源代码括号内只有‘DD64.dll’,刚开始运行老是出错,自己折腾了一番发现是路径不对。这里也可以用绝对路径。

2. 操控键盘

虚拟键盘的虚拟码对应关系为

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjI=,g_se,x_0,y_0,t_100

按键函数为:

DD_key(参数1,参数2)

其中,参数1为DD键码,参数2中1表示按下,2表示放开

例子:模拟TAB按键,只需连写

DD_key(15, 1)
DD_key(15, 2)

如果需要模拟特殊符号或者大写字母按键,只需先按住shift,再按相应按键,例如模拟按@键的代码为:

dd_dll.DD_key(500, 1)
dd_dll.DD_key(201, 1)
dd_dll.DD_key(201, 2)
dd_dll.DD_key(500, 2)

其中500是shift键的模拟码,201是数字2的模拟码

3. 准备《菊花台》键盘谱子

在网上找了一个谱子,它长这样:

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfMjE=,g_se,x_0,y_0,t_100

这是个简化版的,主要由字母和空格组成,现在要做的就是在按键和按键、按键和空格控制好时间间隔,这样才能才能让弹奏出来的音乐更好听,下面是根据我自己的爱好设置的时间间隔:

lists = list(lists)
for i in lists:
    if i == '\n':
        time.sleep(0.5)
    elif i == ' ':
        time.sleep(0.5)
    else:
        single(i)  # 按键
        time.sleep(0.5)

4. 效果展示

拍子有点不准,主要是因为我五音不全,把握不住节奏,请大家莫怪😏

感兴趣的话你可以在此基础上做进一步调整。

文中使用的代码、曲谱、软件已打包上传:

链接:pan.baidu.com/s/1Un1XVS 密码:yunr

------

作者:锅g头

欢迎搜索并关注:Crossin的编程教室

这里还有更多精彩。一起学,走得远!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值