这是一个想模拟机械键盘发声的程序,当你按下鼠标的时候,音箱中就会传出类似机械键盘按下的声音,目前只适合linux系统。
我一直使用vim/neovim,然后neovim中有一个插件叫keysound,这个插件实现了在vim/neovim中机械键盘的音效,我是以这个插件为启发写的一个全局的模拟机械键盘音效的软件。
能力有限,当前这个程序比较简单,代码结构也不好,仅仅是实现了全局监控键盘,然后键盘按下之后发出卡哒声的功能。
该程序依赖SDL2
,所以在编译该程序之前需要先安装SDL2
。
-
下载编译
git clone https://github.com/fgheng/keysound gcc ./keysound.c -lSDL2 sudo chown root ./a.out sudo chmod u+s ./a.out
-
运行
./a.out
运行之后,会首先检测
/dev/input/event*
下的文件,判断哪个文件是与键盘相关的,然后需要用户选择一个文件,之后回车,程序便会在后台运行。
目前这个程序很原始,代码结构也不好,仅仅是实现了功能而已,而且当前还有很多问题需要解决。
-
SDL2的权限问题,如果使用普通用户执行,那么SDL是可以发声的,但是
/dev/input/*
下的文件无法读取,如果是root用户执行,那么/dev/input/*
下的文件可以读取,但是SDL会有问题,我目前想到的解决方案便是下面的方法:sudo chown root ./a.out sudo chmod u+s ./a.out
这样普通用户就可以直接执行了,但我觉得这样非常的不优雅,我也没明白为什么这样就可以了呢?我们知道,上面的命令让这个可执行程序在执行的时候拥有root的权限,但是root权限下SDL有问题啊,为什么这样就没问题了呢?
-
没有做程序终止的后续操作,读取
/dev/input/*
的描述符没有被释放,这个释放应该是在程序被终止的时候进行的,但是代码中没有体现 -
目前连续多个按键同时按下只有一个声音,无法做到混音
-
高CPU占用
- 重新设计代码结构
- 不读取
/dev/input/*
文件,而是学习键盘驱动的写法,所有的键盘输入都可以检测到而不是单纯的一个特定的键盘 - 可以选择音效
- 按下一个声音,抬起一个声音
- 添加一个终端界面,使用
- 调节音量