Skip to content

Latest commit

 

History

History
58 lines (37 loc) · 2.48 KB

README.md

File metadata and controls

58 lines (37 loc) · 2.48 KB

keysound

这是一个想模拟机械键盘发声的程序,当你按下鼠标的时候,音箱中就会传出类似机械键盘按下的声音,目前只适合linux系统。

我一直使用vim/neovim,然后neovim中有一个插件叫keysound,这个插件实现了在vim/neovim中机械键盘的音效,我是以这个插件为启发写的一个全局的模拟机械键盘音效的软件。

能力有限,当前这个程序比较简单,代码结构也不好,仅仅是实现了全局监控键盘,然后键盘按下之后发出卡哒声的功能。

依赖

该程序依赖SDL2,所以在编译该程序之前需要先安装SDL2

使用

  1. 下载编译

    git clone https://github.com/fgheng/keysound
    gcc ./keysound.c -lSDL2
    sudo chown root ./a.out
    sudo chmod u+s ./a.out
  2. 运行

    ./a.out

    运行之后,会首先检测/dev/input/event*下的文件,判断哪个文件是与键盘相关的,然后需要用户选择一个文件,之后回车,程序便会在后台运行。

问题

目前这个程序很原始,代码结构也不好,仅仅是实现了功能而已,而且当前还有很多问题需要解决。

  1. SDL2的权限问题,如果使用普通用户执行,那么SDL是可以发声的,但是/dev/input/*下的文件无法读取,如果是root用户执行,那么/dev/input/*下的文件可以读取,但是SDL会有问题,我目前想到的解决方案便是下面的方法:

    sudo chown root ./a.out
    sudo chmod u+s ./a.out

    这样普通用户就可以直接执行了,但我觉得这样非常的不优雅,我也没明白为什么这样就可以了呢?我们知道,上面的命令让这个可执行程序在执行的时候拥有root的权限,但是root权限下SDL有问题啊,为什么这样就没问题了呢?

  2. 没有做程序终止的后续操作,读取/dev/input/*的描述符没有被释放,这个释放应该是在程序被终止的时候进行的,但是代码中没有体现

  3. 目前连续多个按键同时按下只有一个声音,无法做到混音

  4. 高CPU占用

TODO

  • 重新设计代码结构
  • 不读取/dev/input/*文件,而是学习键盘驱动的写法,所有的键盘输入都可以检测到而不是单纯的一个特定的键盘
  • 可以选择音效
  • 按下一个声音,抬起一个声音
  • 添加一个终端界面,使用
  • 调节音量