
Handy 离线语音转文字完整指南双推理引擎架构与 5 个实用调优技巧【免费下载链接】HandyA free, open source, and extensible speech-to-text application that works completely offline.项目地址: https://gitcode.com/GitHub_Trending/handy11/HandyHandy 是一款免费、开源、完全离线的语音转文字桌面应用按住快捷键说话文字直接落到你当前的输入框里全程不出本机。下面从源码层面拆解它的快捷键状态机、双推理引擎与流式转录实现并给你 5 条可直接照做的调优建议读完你就能安装、选型、按需扩展它。技术栈总览Tauri Rust为什么是两个推理引擎Handy 的界面是薄壳——设置、模型选择、历史都在 src/components/ 下用 React 18 TypeScript Tailwind CSS v4 搭建状态用 Zustand 管理i18next 覆盖 24 种语言。重活全在 Rust 侧音频 I/O、VAD语音活动检测判断音频里是否有人声、推理和文本注入。最大的设计决策是让 Whisper 系模型与 Parakeet 等模型跑在两套独立推理引擎上对应不同文件格式和硬件路径层技术选型理由桌面壳Tauri 2.11webview 只做 UIRust 核心做系统能力二进制远小于 Electron 路线推理引擎 Atranscribe-cppGGUFWhisper Small/Medium/Turbo/Large 与 ParakeetmacOS 编 MetalWindows x86_64 与 Linux x86_64 启 Vulkan见 Cargo.toml推理引擎 Btranscribe-rsONNXParakeet、Moonshine、Canary、SenseVoice 等走 CPU 路线Parakeet V3 即 CPU 优化模型音频 I/O / 重采样cpal / rubato跨平台录音设备枚举把任意采样率统一成模型输入VADvad-rsSilero 为稳定默认Earshot 是实验选项按键与输入rdev、enigo、handy-keys全局快捷键监听、粘贴模拟、macOS Globe 键支持存储rusqlite转录历史落 SQLite⚡ 推理后端按平台编译Windows x86_64 打包 Vulkan 动态后端加多档 CPU 指令集模块Windows ARM 只编 CPU 静态链接macOS 编 Metal——全部声明在 Cargo.toml 的 target 段里用户无需手动装任何 GPU 运行时。数据流拆解从按住键到文字粘贴现象按住快捷键录音、松手停止引擎还在处理上一段时你再按新键状态不会错乱。原理transcription_coordinator.rs 是按键事件状态机——按下去抖 30ms、松开保留 50ms 宽限期用来吞掉 X11 自动重复产生的幻影事件短按低于 hold_threshold_ms默认 300ms记为开关式触发长按才是推键说话忙时到达的按键存入 PendingPress等队列排空后按正确相位续跑避免开始录音却永远停不下来。代码位置src-tauri/src/transcription_coordinator.rs默认值定义在 src-tauri/src/settings.rs。现象说话时浮层文字逐句长出已确认的内容从不闪烁回改。原理流式转录把结果拆成两段——src-tauri/src/managers/transcription.rs 中 StreamTextEvent 的 committed 是只增不改的稳定前缀tentative 是模型还可能改写的易变后缀浮层按这两段渲染。是否支持流式由模型能力位决定Handy 下载前先解析 GGUF 文件头读 streaming、translate、语言检测和支持语言集等 7 个元数据字段做预判加载后再与运行时真值对齐。代码位置src-tauri/src/managers/ 与 src/overlay/。现象内存紧张时不用等模型自己走。原理ModelUnloadTimeout 定义了 Never、Immediately、2/5/10/15 分钟、1 小时共 8 档默认 5 分钟——模型闲置超时即从内存卸载这是 src-tauri/src/settings.rs 里的显式枚举。 实用技巧模型选型、粘贴方式与常见坑只有 CPU 没有 GPU选 Parakeet V3。它走 ONNX 引擎的 CPU 路径并支持自动语言检测项目文档标注约 5 倍实时速度且精度不降。粘贴失败或格式混乱粘贴策略共 6 种CtrlV、Direct、ShiftInsert、CtrlShiftV、None、ExternalScript目标程序拦截 CtrlV 时切 Direct 试试。macOS 蓝牙耳机录音时外放变闷蓝牙耳机切换双向音频所致输出保留耳机输入改选 Mac 内置或外置麦克风README 已知问题一节有说明。不点界面遥控 Handyhandy --toggle-transcription远程控制运行中实例的录音启停handy --cancel取消当前转录--start-hidden --no-tray配合系统自启可做成纯后台服务。专业术语总识别错把术语填进自定义词汇表转录后按相似度做纠错word_correction_threshold 默认 0.18入口见 CustomWords.tsx实现在 audio_toolkit/ 的 apply_custom_words。定制与扩展新增一个功能从哪下手 想加一个设置项最短路径是三段式在 src/components/settings/ 写一个组件在 src/stores/settingsStore.ts 注册状态需要后端持久化就在新字段配 serde 默认函数旧配置文件因此天然兼容。翻译者直接改 src/i18n/locales/ 下的 JSON 即可共 24 个语言目录。src/components/settings/ # 每个设置项一个组件文件 src/stores/settingsStore.ts # 前端状态Zustand src-tauri/src/settings.rs # 配置字段与默认值定义 src-tauri/src/managers/ # 音频/模型/转录三大管理器 src-tauri/src/shortcut/ # 快捷键与输入实现 src/i18n/locales/ # 24 语言翻译Handy 往哪走Handy 的定位不是最强的语音转文字而是最可被 fork 的语音转文字双推理引擎、按平台编译后端、下载前解析模型元数据都是在为接入第三方模型和硬件铺路。社区当前重心在新模型支持、跨平台体验打磨与 Raycast 等外部扩展如果你在做本地 AI 桌面应用它的Rust 核心 薄 webview 壳结构值得直接参考。【免费下载链接】HandyA free, open source, and extensible speech-to-text application that works completely offline.项目地址: https://gitcode.com/GitHub_Trending/handy11/Handy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考