本地 Whisper 听写工具 Dictata 发布 v0.1.0
Rust 编写的 Windows 本地语音听写工具,集成 whisper.cpp 与可选本地 LLM 改写,全程数据不离…
Dictata 是一款 100% 本地运行的 Windows 语音听写工具,采用 Rust 编写,集成 whisper.cpp 与可选的本地 LLM 后处理。开发者近日在 Hacker News 上以「Show HN」形式发布 v0.1.0 版本,强调全程数据不出本机。
核心功能
Dictata 通过全局热键触发录音,再次按下即可将转写文本自动粘贴到当前活动窗口,主要功能包括:
- 热键听写:支持切换式与按住说话两种模式,附带可自定义大小、透明度与位置的浮动波形条
- 连续流式模式:检测到停顿即插入文本,实时反馈
- 静音跳过:可选的 whisper.cpp 语音活动检测,首次使用下载约 2 MB 模型,可减少空白的误识别
- Vulkan GPU 加速:支持 AMD、Intel 与 NVIDIA 显卡,CPU 模式亦可运行
- 多音频源:麦克风、系统音频(WASAPI loopback)或会议模式混合
- LLM 后处理:可调用本地 OpenAI 兼容接口进行「改写」「邮件」「消息」「列表」等格式化输出
- 自定义词表与替换规则:作为初始 prompt 注入 whisper
- Hugging Face 模型搜索:可通过关键词、仓库或直链安装任何 ggml .bin 模型
- 多语言界面:法语、英语、西班牙语,附深色主题与系统托盘图标
技术架构
Dictata 由多个模块组成,核心职责如下:
- main.rs:全局热键、状态机、转写线程调度
- audio.rs:cpal 音频采集与 16 kHz 重采样,ffmpeg 解码
- transcriber.rs:whisper-rs 封装,负责模型加载与转写
- streaming.rs:基于停顿的流式分块与渐进输出
- modes.rs / llm.rs:输出模式与本地 LLM 后处理
- models.rs:ggml 模型目录、下载/删除、Hugging Face 查询与路径管理
- settings.rs / settings_logic.rs:设置窗口 UI 与可测试的业务逻辑
- dock.rs / history.rs / paste.rs / hotkey.rs / tray.rs:浮窗、历史、粘贴、热键、托盘等
项目配套 64 个单元测试,覆盖配置、重采样、混音、设置逻辑、Hugging Face 查询解析、取消手势、下载安全等场景,并提供 CLI 示例 cargo run --example transcribe -- <file.wav>,可通过环境变量 DICTATA_GPU=1 启用 GPU。
平台与构建
Dictata 目前仅支持 Windows 10/11,Linux 版本未在该版本中提供。若要转写文件,需将 ffmpeg 加入 PATH。GPU 构建需要 Vulkan SDK 与 Visual Studio Build Tools(包含 CMake 与 Ninja)。常见构建命令:
- CPU 专用:
cargo build --release --no-default-features - GPU 构建:需在 Visual Studio 开发人员命令提示符中设置
CMAKE_GENERATOR=Ninja并配置VULKAN_SDK
需要注意的是,whisper.cpp 的 vulkan-shaders-gen 子项目路径可能超出 Windows MAX_PATH(260 字符)的限制,触发 FTK1011 或 C1083 错误。解决办法是在 .cargo/config.toml 中将 target-dir 指向盘符根目录的短路径,例如 C:/wt。
许可与发布
Dictata 采用「带 Commons Clause 附加条款」的 MIT 许可:可自由使用、复制、修改、分发与自托管,但不得直接销售软件,亦不得以本软件为主要价值提供付费 SaaS、托管或付费支持等商业化服务。
发布脚本会在 dist/ 目录生成 dictata-<version>-windows-x86_64[-cpu].zip 压缩包,内含可执行文件、README、LICENSE 与 CHANGELOG;由于开发配置可能包含个人数据,程序会在首次运行时自行生成默认配置,不会随包附带。可执行文件为单一二进制,自带图标与版本元数据,GPU 版的 Vulkan 加载由显卡驱动提供,无需额外 DLL。
