基于Python监测键盘输入并发出声音的坤音键盘

news2024/11/28 21:00:42

代码和软件在公众号【走神研究所】发送【键盘】关键字获取。

这是一款基于python的桌面小工具,能够实时显示你敲击键盘的按键,并且当摁下“J”、“N”、“T”、“M”时会发出坤音。

828cdcfce9c2dde667fa2f1f6b81ee8f.gif

具体视频 演示和代码原理在这里

打开程序,随意摁下键盘,小坤坤就会张开嘴巴,显示键盘。

当触发到绝密时机的时候(键盘jntm)就会发出美妙的坤音。

现在给大家讲下整个程序的原理。

首先是资源文件,小人的图片是我从网上找的坤坤手办,用Photoshop抠出来的,在嘴部增加一个黑色圆圈,代表张嘴。再加上一个气泡框用来显示文字,图片资源就搞定了。

047b223ccd6b8c33c7cb2281987733d4.jpeg

声音资源则是从网上找到坤坤本人的采访音频,截取出来对应的声音片段即可。

代码原理比较简单,主要基于pynput库,这个库可以监测和模拟键盘和鼠标输入,我们用这个库来实现对键盘输入的监控。

from pynput.keyboard import Listener, GlobalHotKeys, Key
class KeyBoardLister():
    def __init__(self, on_press_func, on_release_func, hot_keys_func_map=None):
        self.on_press = on_press_func
        self.on_release = on_release_func
        # 开启热键监控
        if hot_keys_func_map is not None:
            self.start_monitor_hotkey(hot_keys_func_map)
        self.start_monitor_keyboard()
        
    # 键盘监测
    def start_monitor_keyboard(self):
        self.listener = Listener(on_press=self.on_press, on_release=self.on_release)
        self.listener.start()

    # 热键监控-非阻塞
    def start_monitor_hotkey(self, hot_keys_func_map):
        h = GlobalHotKeys(hot_keys_func_map)
        h.start()

gui采用pyqt,摁下键盘,显示张嘴小人,松开键盘,显示闭嘴小人,这样就可以实现说话的效果。

def set_char(self, ch):
        if ch is None:
            return
        if ch in self.ch2audio:
            self.play_radio(self.ch2audio[ch])
        if ch == "j" or ch == "J":
            ch = "只因"

        # 设置字母
        if len(ch) == 1:
            # 显示字母
            font = QtGui.QFont()
            font.setFamily("微软雅黑")
            font.setPixelSize(35)
            font.setBold(True)
            self.lab_content.setFont(font)
            self.lab_content.setStyleSheet("color:black;")
            self.lab_content.move(40, 28)
        else:
            # 显示字母
            font = QtGui.QFont()
            font.setFamily("微软雅黑")
            font.setPixelSize(25)
            font.setBold(True)
            self.lab_content.setFont(font)
            self.lab_content.setStyleSheet("color:black;")
            self.lab_content.move(28, 28)
        self.lab_content.setText(ch)
        self.lab_content.adjustSize()
        # 张嘴
        self.lab.setPixmap(QtGui.QPixmap(resource_path(os.path.join("imgs", "cai2.png"))))


    # 长时间没有触发则要回归到最初状态
    def reset_char(self):
        # 清除文字
        self.lab_content.setText("")
        self.lab_content.adjustSize()
        # 闭嘴
        self.lab.setPixmap(QtGui.QPixmap(resource_path(os.path.join("imgs", "cai1.png"))))

当键盘匹配到特定输入时,就会播放对应音频,包括“jntm”四个字母,以及摁下快捷键“ctrl+j”时会播放“你干嘛”。

播放音频用的库是playsound库,这里要注意播放音频需要新开一个子线程,否则会阻塞主线程继续监听键盘。

# 开线程放音乐,避免阻断主流程,实现可以同时放多个radio
def play_radio(self, path):
        t = threading.Thread(target=playsound.playsound, args=(path,))
        t.start()

短短200行代码实现的坤音键盘,你还不来试试?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022/11/27一周总结

项目 redis 安装以及启动 切换到redis根目录运行cmd,先启动服务端redis-server.exe 2.输入redis-cli并回车(redis-cli是客户端程序)如图正常提示进入,并显示正确端口号,则表示服务已经启动。 基本知识 数据类型 St…

算法提升:图的Dijkstra(迪杰斯特拉)算法

目录 概念 思路 代码 概念 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始&#xf…

【Hack The Box】linux练习-- Ophiuchi

HTB 学习笔记 【Hack The Box】linux练习-- Ophiuchi 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月27日🌴 &#x1…

MySQL的执行计划explain

select_type:表示的查询类型 SIMPLE:表示查询语句不包含子查询和union;PRIMARY:表示此查询是最外层的查询;UNION: 表示此查询是UNION的第二个或后续的查询;DEPENDENT UNION:表示此查询是UNION的第二个或后续…

ARM Developer Keil MDK 5.X Crack

ARM Developer Keil MDK是面向各种STM32微控制器产品的全面软件开发解决方案,提供创建、编译和调试嵌入式应用程序时所需的一切资源。MDK包括真正的Arm编译器和易于使用的Keil uVision IDE/调试器,可与STM32CubeMX和软件包连接。MDK还提供各种专业的中间…

Faster R-CNN详解

Faster R-CNN Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。 Faster R-CNN算…

Easyrecovery2022硬盘磁盘U盘免费数据恢复软件

EasyRcovery的软件支持因各种原因损坏或误删的文件,文档,照片,视频,音频,电子邮件等等类型的数据它都可以恢复。同时,这款软件不仅仅支持u盘的数据恢复,移动硬盘,磁盘,sd…

【POJ No. 3067】 公路交叉数 Japan

【POJ No. 3067】 公路交叉数 Japan 北大 OJ 题目地址 【题意】 东海岸有N 个城市,西海岸有M 个城市(N ≤1000,M ≤1000),将建成K 条高速公路。每个海岸的城市从北到南编号为1, 2, ……每条高速公路都是直线&#xf…

计算机网络---TCP流量控制和拥塞控制

(一) TCP 流量控制 TCP提供流量控制服务来消除发送方(发送速率太快)使接收方缓存区溢出的可能性,因此 流量控制是一个速度匹配服务(让发送方慢一点,要让接收方来得及接收,实现匹配发…

Qt编写物联网管理平台(支持win/linux/mac/嵌入式linux/modbus等)

一、前言 这个物联网综合管理平台前后迭代了五年,一点一滴慢慢积累起来,从最开始的只有modbus串口协议解析以及简单的表格显示数据,慢慢的逐渐增加了tcp_rtu支持,用户管理模块,地图监控模块,而后为了拓展性…

消息队列 RabbitMQ入门:Linux(Docker)中安装和卸载RabbitMQ服务

文章目录前言一、Linux中安装RabbitMQ下载Erlang下载RabbitMQ进入Linux进行安装启动RabbitMQ二、RabbitMQ Web管理页面安装RabbitMQ Web管理页面访问管理页面三、使用Docker安装RabbitMQ安装Docker安装启动RabbitMQ访问管理页面四、Linux卸载RabbitMQ相关卸载RabbitMQ卸载Erlan…

第41讲:MySQL内置的QL性能分析工具

文章目录1.SQL性能分析的概念2.分析数据库中SQL的执行频率3.数据库中的慢查询日志3.1.开启慢查询日志功能3.2.模拟慢SQL查询观察日志内容4.Profile查看SQL每个阶段的耗时4.1.开启Profile操作4.2.随便执行一些查询语句4.3.查询执行SQL的耗时4.4.查询某一条SQL每个阶段的耗时4.5.…

【ASM】字节码操作 工具类与常用类 InstructionAdapter 介绍

文章目录 1.概述1.1 为什么会有 InstructionAdapter类?2. InstructionAdapter2.1 class info2.2 fields2.3 构造方法2.4 methods3.示例3.1预期目标4.总结1.概述 在上一节:【ASM】字节码操作 工具类与常用类 AnalyzerAdapter 工作原理 我们学习了AnalyzerAdapter类的工作原理…

【OpenCV 例程 300篇】246. 特征检测之ORB算法

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】246. 特征检测之ORB算法 特征检测与匹配是计算机视觉的基本任务,包括检测、描述和匹配三个相互关联的步骤。广泛应用于目标检测、图像检索、视频跟踪和三维重建等诸多领域。 6.9.1 ORB 算…

【Hack The Box】linux练习-- SneakyMailer

HTB 学习笔记 【Hack The Box】linux练习-- SneakyMailer 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月23日🌴 &…

函数调用在嵌入式架构设计中的应用

函数调用很好理解,即使刚学没多久的朋友也知道函数调用是怎么实现的,即调用一个已经封装好的函数,实现某个特定的功能。 把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,然后在其他地方调用即…

SpringCloud - Config分布式配置中心

文章目录一.概述1. 分布式系统面临的配置问题2. 什么是配置中心3. 配置中心怎么用4. 配置中心能做什么二.Config服务端配置与测试1. 搭建1.1 在github上创建一个springcloud_config的新仓库1.2 获得新仓库的地址:1.3 本地硬盘目录上新建git仓库并clone1.4 创建文件1…

设置一个不能被继承的类

小屋杂谈,记录日常 方法1: 如果想让这个类不能被继承,可以把这个类的构造函数设置成私有,这样子类去继承他构造就会报错,这样的话这个类就是不能被继承的,如果需要用这个类的对象的话,在基类里…

机器学习中的交叉熵

文章目录一、背景二、概率论基础知识三、熵≈信息熵(应用领域不同)、相对熵KL散度、交叉熵、softmax、sigmoid、交叉熵损失图像分割如何理解CrossEntropyLoss()参考资料一、背景 学习机器学习过程中,总是会遇到交叉熵这个名词。通过交叉熵损…

SpringBoot整合knife4j

1.1 Swagger 前后端分离开发:前端和后端分开进行开发,2个项目,一个是前端项目,一个是后端项目 目前基本上很多小项目都是前后端分离,除了后台管理系统 前后端分离开发,前端(app、小程序、智能硬件等)怎么…