20260614.205620260613.2201x-asr-zh-en-960ms 实验模型 profile,用于评估中英混输和未来“边说边出字”方向。OnlineRecognizer,先复用现有“一段录音 -> 最终文本”听写流程验证模型效果,不改 live partial 上屏链路。scripts/install-x-asr-zh-en-960ms.sh,只下载 Hugging Face chunk-960ms-model 所需四个文件,不把大模型放入 git。codex/freeze-2.1.28-appstore-20260605.0353,指向已上传成功的 2.1.28 App Store 源码基线。20260607.014720260604.0049私语输入法 (PrivateVoice Dictation)、离线识别说明、数据不出设备声明、开源项目归属、版权许可、隐私政策和支持反馈链接。privatevoice-dictation-support 支持站点;保留 VoiceSnap 原项目地址入口。20260603.2238私语输入法,英文系统显示 PrivateVoice Dictation。*.lproj/InfoPlist.strings 打入 .app/Contents/Resources。20260603.2151私语输入法、永远离线·稳定极速。私密离线 · 自定义词库 · 保护隐私 和 真正属于你的语音输入法。PrivateVoice Dictation。20260603.2102PrivateVoice Input 改为 PrivateVoice Dictation,同步 macOS App bundle、DMG 文件名、Info.plist、Wails 构建配置和用户可见文案。PrivateVoice,下方小字显示 Private. Offline.。Application Support/PrivateVoice Input,避免影响历史记录、模型文件和系统权限。20260603.1934qwen3-asr-0.6b 可选高级模型,默认模型仍保持 sensevoice-zh。sherpa-onnx-go* 到 v1.13.2,接入 OfflineQwen3ASRModelConfig,支持 conv_frontend.onnx、encoder.int8.onnx、decoder.int8.onnx 和 tokenizer/ 目录结构。engine:status,避免设置页模型卡片和底部 Engine 信息显示不同步。20260603.1904parakeet-en 可选高级模型,默认模型仍保持 moonshine-en。encoder.int8.onnx、decoder.int8.onnx、joiner.int8.onnx、tokens.txt 四文件结构。20260603.1608moonshine-en,中文语言版本继续默认 sensevoice-zh。preprocess.onnx、encode.int8.onnx、uncached_decode.int8.onnx、cached_decode.int8.onnx、tokens.txt。ModelSelectionMode=auto|manual,旧配置缺字段时按 auto 处理,避免 Round 2 的 SelectedModelID=sensevoice-zh 锁死 English 默认模型。DownloadCurrentModel(),由后端根据 effective language 和 profile 选择下载 SenseVoice 或 Moonshine。02-P-NBL/round-3 下 PRD、研发拆解、QA 计划、自查、复审、QA handoff 和 QA 预检记录。20260603.1327config.json 缺少 LanguageMode / LanguageID 时可正常启动,并自动 fallback。02-P-NBL/round-2 下 PRD、研发拆解、QA 计划、QA 报告和验收记录。20260603.1145privatevoice.src,建立模型 profile、安装状态、resolver、staging 下载校验和旧 models/sensevoice fallback 基线,为后续 Moonshine / Parakeet / Qwen3-ASR 多模型扩展做准备。EngineService.GetStatus() 补查启动早期状态。02-P-NBL/round-1 下 PRD、研发拆解、QA 计划、自查记录、预检记录和自动化测试日志。20260602.202220260601.190520260531.135920260531.113120260531.1102P / V 字母图标。20260531.0120exportedAt,导出勘误 CSV 可选择“今天未处理 / 近 7 天未处理 / 全部未处理”,成功写入 CSV 后才标记本次历史,避免下次重复导出旧记录。20260530.194920260530.1800记录ID、识别时间、识别历史文本、错误词/正确词 等中文列名,样例行文案改为“正确的格式是点 CSV”,并保持导入端兼容旧版英文表头。20260530.1757history.json。history.json 保存路径展示,长路径单行省略但可复制完整路径,避免撑坏页面布局。history.json 和 userdict.json 权限收紧到 0600。20260530.1640VoiceSnap 应用支持目录迁移配置、词库、历史和模型文件,已存在的新文件不会被覆盖。20260528.120620260519.181820260519.160320260518.222920260518.2205icon.icns。20260518.174820260518.1651NSWindow 调整为非激活 NSPanel,窗口层级提升到状态栏级别,并补充 Transient / IgnoresCycle / FullScreenAuxiliary / CanJoinAllSpaces 行为,确保任意 App 全屏 Space 下也能显示录音胶囊。20260518.1623VoiceSnap 2.0 使用 Go + Wails v3 + Svelte 从零重写,目标是更小体积、更优体验、未来跨平台。
| 模块 | 实现 |
|---|---|
| 音频录制 | malgo (miniaudio),16kHz/16-bit/mono PCM |
| 语音识别 | sherpa-onnx SenseVoice,DirectML GPU → CPU 自动回退 |
| 全局热键 | GetAsyncKeyState 30ms 轮询,支持长按/短按/组合键过滤 |
| 文字粘贴 | Win32 剪贴板 + SendInput Ctrl+V,失败回退 Unicode SendInput |
| 浮动指示器 | Win32 GDI+ Layered Window,WS_EX_NOACTIVATE + TOPMOST,可拖拽 + 位置记忆 |
| 文本后处理 | CJK/ASCII 边界自动加空格,句首大写,特殊标记清理 |
| 音效合成 | Go 程序化生成 WAV (48kHz, 基频+谐波+指数衰减),winmm.dll PlaySound |
| 识别历史 | JSON 文件持久化,最多 50 条,按保留天数自动清理 |
| 前端 | Svelte 5 + Vite 6 + TypeScript,~80 KB 产物 |
| 配置 | JSON 格式,兼容 WPF 版 config.json |
| v2.0 Go | v1.3.2 WPF | |
|---|---|---|
| 运行文件体积 | ~34 MB | ~80 MB |
| 运行内存 | ~400 MB | ~500 MB |
| 自由说话模式 | 有 | 无 |
| 录音音效 | 有(可关闭) | 无 |
| 录音计时 | 有 | 无 |
| Esc 取消 | 有 | 无 |
| 剪贴板保护 | 有 | 无 |
| 识别历史 | 有(50条) | 无 |
| 麦克风切换 | 有 | 无 |
| 中英混合优化 | 有(自动加空格+大写) | 无 |
| 指示器拖拽 | 有(位置记忆) | 无 |
| 多语言 UI | 中/英 | 中/英 |
| 跨平台 | Windows + macOS | 仅 Windows |