9 个版本 (5 个重大更新)

0.6.0 2024年4月10日
0.5.0 2023年10月18日
0.4.0 2023年10月15日
0.3.1 2023年10月10日
0.1.0-alpha.02023年9月30日

#22 in 多媒体

Download history 22/week @ 2024-04-19 8/week @ 2024-04-26 1/week @ 2024-05-03 4/week @ 2024-05-10 7/week @ 2024-05-17 3/week @ 2024-05-24 5/week @ 2024-05-31 5/week @ 2024-06-07 1/week @ 2024-06-14 2/week @ 2024-06-28 9/week @ 2024-07-19 49/week @ 2024-07-26 3/week @ 2024-08-02

每月61次下载

MIT/Apache

645KB
806

将您的键盘变成打字机!📇

GitHub Release Crate Release Coverage
Continuous Integration Continuous Deployment Documentation

daktilo (土耳其语中意为“打字机”,发音为“duck-til-oh”,源自古希腊单词 δάκτυλος,意为“手指”)是一个小巧的命令行程序,每次您按下键时都会播放打字机声音。它还提供了自定义按键声音的灵活性。您可以使用内置的声音预设来创建愉快的打字体验,无论是撰写电子邮件还是对老板恶作剧。

✨ 灵感: "用我的打字机在课堂上做笔记"

现在您可以在不需要实际打字机的情况下重现这个时刻了!

目录

入门

只需运行 daktilo 以获得经典的打字机效果。

还有其他不同的预设可用

预设名称 描述
default 经典的打字机效果
basic 一种替代的更基本的打字机效果
musicbox 像音乐盒一样播放随机音符
ducktilo 嘎嘎嘎 🦆
drumkit 咚,噗,嚓! 🥁
spark 高电压高电流打字体验 ⚡

列出预设

daktilo --list-presets

使用预设

daktilo --preset musicbox

您还可以同时使用多个预设

# orchestra
daktilo -p default -p musicbox -p drumkit

使用不同的输出设备

daktilo --device pipewire

此外,您还可以使用 --list-devices 列出可用的输出设备。

为了使声音多样化并获得更真实的打字机体验

daktilo --variate-tempo 0.9,0.4 --variate-volume 0.1,0.5
剧透警告

存在彩蛋。如果您不喜欢它们,可以通过配置文件选项禁用它们,方法如下:no_surprises = true,或者使用命令行标志

daktilo --no-surprises

支持的平台

  • Linux
    • X11
    • Wayland*
  • Windows
  • MacOS

安装

Packaging status

Cargo

daktilo可以通过crates.io使用cargo安装,前提是已安装Rust

cargo install daktilo

最低支持的Rust版本是1.70.0

在Linux上,应安装以下包

  • Arch Linux: alsa-lib libxtst libxi
  • Alpine Linux: alsa-lib-dev libxi-dev libxtst-dev
  • Debian/Ubuntu: libasound2-dev libxi-dev libxtst-dev

Arch Linux

daktilo可以从官方仓库使用pacman安装

pacman -S daktilo

Alpine Linux

daktiloAlpine Edge中可用。启用测试仓库后,可以通过apk安装。

apk add daktilo

MacPorts

在macOS上,daktilo可以通过MacPorts安装

sudo port install daktilo

更多信息请点击这里

二进制发布

发布页面查看针对不同目标提供的可用二进制文件。

从源码构建

  1. 克隆仓库。
git clone https://github.com/orhun/daktilo && cd daktilo/
  1. 构建。
CARGO_TARGET_DIR=target cargo build --release

二进制文件将位于target/release/daktilo

使用方法

daktilo [OPTIONS]

选项:

-v, --verbose                                    Enables verbose logging [env: VERBOSE=]
-p, --preset [<PRESET>...]                       Sets the name of the sound preset to use [env: PRESET=]
-l, --list-presets                               Lists the available presets
    --list-devices                               Lists the available output devices
-d, --device <DEVICE>                            Sets the device for playback [env: DAKTILO_DEVICE=]
-c, --config <PATH>                              Sets the configuration file [env: DAKTILO_CONFIG=]
-i, --init                                       Writes the default configuration file
    --variate-volume <PERCENT_UP[,PERCENT_DOWN]> Variate volume +/- in percent [env: DAKTILO_VOLUME=]
    --variate-tempo <PERCENT_UP[,PERCENT_DOWN]>  Variate tempo +/- in percent [env: DAKTILO_TEMPO=]
-h, --help                                       Print help (see more with '--help')
-V, --version                                    Print version

配置

daktilo可以使用TOML格式通过配置文件进行配置。

可以通过--config参数或DAKTILO_CONFIG环境变量指定配置文件的路径。

它还可以放置在以下全局位置之一

  • <config_dir> / daktilo.toml
  • <config_dir> / daktilo/daktilo.toml
  • <config_dir> / daktilo/config

<config_dir>的值取决于平台,如下表所示

平台 示例
Linux $XDG_CONFIG_HOME$HOME/.config /home/orhun/.config
macOS $HOME/Library/Application Support /Users/Orhun/Library/Application Support
Windows {FOLDERID_RoamingAppData} C:\Users\Orhun\AppData\Roaming

请参阅 daktilo.toml 以了解默认配置选项。

您还可以使用 --init 标志在当前目录中创建默认配置文件

daktilo --init

添加自定义预设

配置文件由一个包含 sound_preset 条目的数组组成。

要在 TOML 中定义数组,可以创建如下所示的不同部分

[[sound_preset]]
name = "custom"
key_config = []

[[sound_preset]]
name = "another_custom"
key_config = []
disabled_keys = []
variation = { volume: [0.1, 0.1], tempo: [0.05, 0.05] }

如上图所示,sound_preset 包含 2 个条目

  • name:预设的名称。它将与 --preset 标志一起使用。例如: --preset custom
  • key_config:将音频文件分配给指定键的按键按下/释放事件的数组。它还可以用来控制音量等。
  • disabled_keys:不用于播放的键的数组。
  • variation:对于未指定变体的 key_config,在每次事件上变音*
点击查看 可用键的列表

AltAltGrBackspaceCapsLockControlLeftControlRightDeleteDownArrowEndEscapeF1F10F11F12F2F3F4F5F6F7F8F9HomeLeftArrowMetaLeftMetaRightPageDownPageUpReturnRightArrowShiftLeftShiftRightSpaceTabUpArrowPrintScreenScrollLockPauseNumLockBackQuoteNum1Num2Num3Num4Num5Num6Num7Num8Num9Num0MinusEqualKeyQKeyWKeyEKeyRKeyTKeyYKeyUKeyIKeyOKeyPLeftBracketRightBracketKeyAKeySKeyDKeyFKeyGKeyHKeyJKeyKKeyLSemiColonQuoteBackSlashIntlBackslashKeyZKeyXKeyCKeyVKeyBKeyNKeyMCommaDotSlashInsertKpReturnKpMinusKpPlusKpMultiplyKpDivideKp0Kp1Kp2Kp3Kp4Kp5Kp6Kp7Kp8Kp9KpDeleteFunctionUnknown

以下是一个配置 key_config 的例子。

key_config = [
  { event = "press", keys = "Return", files = [{ path = "ding.mp3", volume = 1.0 }] },
]
  • event:表示“按下”或“释放”。
  • keys:用于匹配键的常规表达式(regex)。
  • files:文件数组。
    • path:文件的绝对路径。如果文件嵌入在二进制文件中(即在 sounds/ 目录内),则仅为文件名,不带完整路径。
    • volume:声音的音量。值 1.0 是“正常”音量(未过滤的输入)。除 1.0 之外的所有值都将乘以该值。
  • variation:在每个 event 上变化声音*

如果你为按键事件定义了多个文件,你也可以指定如何播放它们的策略

key_config = [
  { event = "press", keys = ".*", files = [{ path = "1.mp3" }, { path = "2.mp3" }], strategy = "random" },
]

当前支持以下策略

  • strategy = "random":从列表中随机选择一个文件并播放。
  • strategy = "sequential":按顺序播放文件。

以下是组合所有内容的示例

[[sound_preset]]
# Custom sound preset named "custom"
name = "custom"

# Key configurations for various events
key_config = [
  # When a key starting with "Key" is pressed, play 1.mp3, 2.mp3, and 3.mp3 sequentially
  { event = "press", keys = "Key*", files = [
    { path = "1.mp3" },
    { path = "2.mp3" },
    { path = "3.mp3" },
  ], strategy = "sequential" },

  # When a key starting with "Key" is released, play 4.mp3
  { event = "release", keys = "Key*", files = [
    { path = "4.mp3" },
  ] },

  # When a key starting with "Num" is pressed, play num.mp3 at a very high volume (10.0)
  { event = "press", keys = "Num*", files = [
    { path = "num.mp3", volume = 10.0 },
  ] },

  # When any key is pressed, play a random sound from cat.mp3, dog.mp3, or bird.mp3
  { event = "press", keys = ".*", files = [
    { path = "cat.mp3" },
    { path = "dog.mp3" },
    { path = "bird.mp3" },
  ], strategy = "random", variation = { volume: [0.1, 0.1], tempo: [0.05, 0.05] } },
]

# Disabled keys that won't trigger any sound events
disabled_keys = ["CapsLock", "NumLock"]

声音变化

为了使键盘声音更加多样化,可以同时变化音量和播放速度(后者也会变化音调)。

数值以百分比表示,其中第一个值确定最大增加量,第二个值确定最大减少量。实际值在每个按键时随机确定。

  • 如果设置了命令行参数或环境变量,则预设中做出的配置将被覆盖。
    • 值需要用逗号隔开。
    • 如果只提供了一个值,则用于增加和减少
  • 如果设置了 key_config,则预设值将被覆盖。
  • 预设上的配置适用于所有没有设置任何值的 key_config

类似项目

MacOS 权限

在 MacOS 上,您需要授予运行 daktilo 的终端一些权限。

第一次运行 daktilo 时,您可能会看到这个弹出窗口

macos-permissions

如果您看到它,请点击“打开系统设置”,否则请手动打开“系统设置”,然后转到“隐私和安全”。从这里,为您终端应用程序启用“输入监控”

macos-input-monitoring

致谢

非常感谢 H. Arda Güler 提供了这个项目的想法,分享了背后的灵感,并在 Python 中实现了第一个迭代。

干得好!👾

捐赠

Support me on GitHub Sponsors Support me on Patreon Support me on Patreon

如果您觉得 daktilo 和/或我在 GitHub 上的其他项目很有用,请考虑在 GitHub Sponsors 上支持我或成为赞助者

贡献

请参阅我们的 贡献指南,并在与项目的所有互动中遵守 行为准则

此外,请参阅如何添加新预设这里

许可证

License: MIT License: Apache 2.0

根据您的选择,在 Apache License Version 2.0MIT License 下许可。

🦀 ノ( º _ º ノ) - 尊重螃蟹!

版权所有 © 2023-2024, Orhun Parmaksız

依赖关系

~21–58MB
~866K SLoC