Python让键盘发声

Python让键盘发声

阅读量:
评论数:

Python让键盘发声

代码1:1复刻于如何给键盘绑定指定音效?(哔哩哔哩)

我只做了j、n、t、m四个键对应的鸡你太美音频😇

如果你是二刺螈的话,你就可以获得这样一把键盘:向妈妈炫耀自己的新键盘(哔哩哔哩)

文件结构

tree.webp

需要

须安装相应的库

使用Match-Case 语法需要Python 3.10及以上版本

代码

sound.py

import threading
import keyboard
from playsound import playsound

def play(keysound):
    playsound('./sound/' + keysound)

def Press(x):
    if x.event_type == 'down':
        match x.name:
            case 'j':
                threading.Thread(target=play,args=('j.mp3',)).start()
            case 'n':
                threading.Thread(target=play,args=('n.mp3',)).start()
            case 't':
                threading.Thread(target=play,args=('t.mp3',)).start()
            case 'm':
                threading.Thread(target=play,args=('m.mp3',)).start()

if __name__ == '__main__':
    keyboard.hook(Press)
    keyboard.wait()

sound文件夹内放入音频文件:jntm.zip

报错

Windows使用playsound库可能会报错:指定的设备未打开,或不被 MCI 所识别。

需要修改这个模块其中的一个函数。

先找到playsound.py的路径

运行下面的代码

import playsound
print(playsound.__file__)

输出D:\python\venv\Lib\site-packages\playsound.py ,每个人应该都不一样。

根据本机输出路径找到这个文件打开,

需要修改的函数应该在第52行

    def winCommand(*command):
        bufLen = 600
        buf = c_buffer(bufLen)
        # command = ' '.join(command).encode('utf-16')  把这行注释掉,改成下面的一行
        command = ' '.join(command)
        errorCode = int(windll.winmm.mciSendStringW(command, buf, bufLen - 1, 0))  # use widestring version of the function
        if errorCode:
            errorBuffer = c_buffer(bufLen)
            windll.winmm.mciGetErrorStringW(errorCode, errorBuffer, bufLen - 1)  # use widestring version of the function
            exceptionMessage = ('\n    Error ' + str(errorCode) + ' for command:'
                                #'\n        ' + command.decode('utf-16') +  把这行注释掉,改成下面的一行
                                '\n        ' + command +
                                '\n    ' + errorBuffer.raw.decode('utf-16').rstrip('\0'))
            logger.error(exceptionMessage)
            raise PlaysoundException(exceptionMessage)
        return buf.value

一般这样就可以正常运行了。

Licensed under CC BY-NC-SA 4.0
Built with Halo
主题 Stack Jimmy 设计 • 由Jiewen移植
📑共水了 93篇文章.
载入天数... 载入时分秒...
RSS Icon RSS订阅