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

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

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

df428224306cc304f60644eaacf8096f.gif

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

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

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

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

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

5f81ea61654407dbaec1c8aa856dfa7a.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行代码实现的坤音键盘,你还不来试试?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值