3 个不稳定版本

0.6.1 2024 年 4 月 10 日
0.6.0 2024 年 4 月 10 日
0.5.0 2024 年 4 月 10 日

#116 in 多媒体

每月 31 次下载
2 个包 中使用

MIT/Apache

615KB
536

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

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许可

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

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

依赖关系

~19–54MB
~774K SLoC