社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Crossin的编程教室 • 6 年前 • 618 次点击  

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


 


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

 


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



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


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


 

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

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


 

打开压缩包,有以下文件


 

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


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


1. 调用dll文件


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


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


2. 操控键盘


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



按键函数为:

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. 准备《菊花台》键盘谱子


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

 

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

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. 效果展示



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

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

 

文中使用的代码、曲谱、软件已打包上传,获取请在公众号“Crossin的编程教室”里回复关键字: 200218




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54937