专栏首页华章科技谁在用 Python 弹奏一曲《菊花台》

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

导读:想必各位在家已经闲得快发疯了吧,但是我不想这么萎靡下去,我想做点高雅的事情……

作者:锅g头

来源:Crossin的编程教室(ID:crossincode)

看到朋友圈有人在手机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. 效果展示

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

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

本文分享自微信公众号 - 大数据(hzdashuju)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python这10个字典操作你必须知道

    不要使用 key in d.keys(), 这是一种画蛇添足的操作,因为d.keys()会返回一个新的列表对象,导致内存最大。

    华章科技
  • so easy!10行代码写个"狗屁不通"文章生成器

    前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。

    华章科技
  • 和 Python 2.x 说再见!

    在技术的长河中,软件、工具、系统等版本的迭代本是常事,但由于使用习惯、版本的兼容性、易用性等因素,很多用户及开发者在使用或做开发的过程中,并不愿意及时同步更新,...

    华章科技
  • iOS下载报错:App Transport Security has blocked a cleartext HTTP

    以上方法虽然解决了HTTP不能正常使用的问题,但是苹果提供的安全保障也被关闭了,对于不支持HTTPS协议的网站,可以考虑白名单:

    陈满iOS
  • MySQL - WHERE优化篇

    在做JAVA开发中,通过指令重拍会对代码做一定程度的优化,在数据库中 MYSQL优化器也做了一系列相关优化工作,下面要介绍的就是数据库做的内置优化

    battcn
  • Vue中key的作用

    key的特殊attribute主要用在Vue的虚拟DOM算法,在新旧Nodes对比时辨识VNodes。如果不使用key,Vue会使用一种最大限度减少动态元素并且...

    WindrunnerMax
  • nohup python缓存问题

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn....

    Tyan
  • 数据结构与算法-Map集合

    cwl_java
  • Java 8 Time Api 使用指南-珍藏限量版

    Java 8为Date和Time引入了新的API,以解决旧java.util.Date和java.util.Calendar的缺点。

    码农小胖哥
  • 从拜耳620亿美元收购孟山都展望数字化农业的发展

    大数据文摘

扫码关注云+社区

领取腾讯云代金券