edit | blame | history | raw

Changelog

v2.1.21 (2026-06-03)

QA 候选包

  • Round 3 Moonshine English 默认模型:English 语言版本默认 current model 改为 moonshine-en,中文语言版本继续默认 sensevoice-zh
  • Moonshine backend:macOS sherpa-onnx 接入 Moonshine v1 四文件配置:preprocess.onnxencode.int8.onnxuncached_decode.int8.onnxcached_decode.int8.onnxtokens.txt
  • 模型选择解析:新增 ModelSelectionMode=auto|manual,旧配置缺字段时按 auto 处理,避免 Round 2 的 SelectedModelID=sensevoice-zh 锁死 English 默认模型。
  • 按当前模型下载:Onboarding 改为调用 DownloadCurrentModel(),由后端根据 effective language 和 profile 选择下载 SenseVoice 或 Moonshine。
  • 语言切换同步模型:设置页切换中文/English 后会刷新 current model;缺模型时进入 onboarding,已安装时重载引擎。
  • 安全回归保护:Moonshine 初始化失败会清空旧引擎,避免用户实际继续使用旧模型;SenseVoice 中文路径和用户数据保持兼容。
  • QA 资料:新增 02-P-NBL/round-3 下 PRD、研发拆解、QA 计划、自查、复审、QA handoff 和 QA 预检记录。

构建

  • build: 20260603.1327
  • 说明: 本版本为 Round 3 QA 测试包候选,已完成源码级自查和 QA 预检,仍需真机验证 Moonshine 下载、加载、英文断网识别、history 写入、语言切换和中文 SenseVoice 回归。

v2.1.20 (2026-06-03)

QA 候选包

  • Round 2 语言版本设置:设置页新增“语言版本”,支持自动、中文、English 三种模式。
  • 系统语言解析:新增语言 profile 和 resolver,中文系统默认中文,English 系统默认 English,其他语言默认 English。
  • 前端 i18n 切换:语言切换后设置页、侧边栏、关于页等关键文案立即切换。
  • 老用户兼容:旧 config.json 缺少 LanguageMode / LanguageID 时可正常启动,并自动 fallback。
  • 模型隔离:本轮语言切换不引入 Moonshine / Parakeet / Qwen3-ASR,不改写或删除 SenseVoice 模型。
  • QA 资料:新增 02-P-NBL/round-2 下 PRD、研发拆解、QA 计划、QA 报告和验收记录。

构建

  • build: 20260603.1145
  • 说明: 本版本为 Round 2 QA 通过后的测试包候选,已完成老用户升级、新用户临时 HOME、语言切换、重启持久化、断网启动和断网真实语音输入复测。

v2.1.19 (2026-06-02)

QA 候选包

  • Round 1 模型 Profile 架构基线:将正式源码目录固定为 privatevoice.src,建立模型 profile、安装状态、resolver、staging 下载校验和旧 models/sensevoice fallback 基线,为后续 Moonshine / Parakeet / Qwen3-ASR 多模型扩展做准备。
  • 模型下载安全性:下载流程改为临时目录下载、staging 解压校验、安全替换;primary URL 下载到坏包时会继续尝试 fallback URL;失败时不删除已有可用模型。
  • 启动状态可恢复:engine 初始化区分缺模型和模型结构存在但不可加载,前端可通过 EngineService.GetStatus() 补查启动早期状态。
  • QA 资料:新增 02-P-NBL/round-1 下 PRD、研发拆解、QA 计划、自查记录、预检记录和自动化测试日志。

构建

  • build: 20260602.2022
  • 说明: 本版本为 Round 1 QA 测试包,尚需真机验证真实 SenseVoice 模型、麦克风权限、断网识别、replacement、历史写入、网络观察和 macOS 窗口/Dock smoke。

v2.1.4 (2026-05-18)

改进

  • 更新 macOS App 图标:采用最终确认的 B 版白底蓝色麦克风矢量图标,并保留轻微麦克风层次阴影,重新生成 PNG、iconset 和 icon.icns

构建

  • build: 20260518.1748

v2.1.3 (2026-05-18)

新功能

  • 语音输入方式可选:设置页新增“点按 / 长按”模式。点按模式下,点一下快捷键开始说话,再点一下结束并输入;长按模式下,按住快捷键开始说话,松开后结束并输入。

改进

  • 热键状态机拆分为清晰的点按与长按逻辑,避免短按/长按自动判断造成交互不确定。

构建

  • build: 20260518.1651

v2.1.2 (2026-05-18)

Bug 修复

  • 全屏窗口下悬浮指示器不显示:macOS 悬浮指示器从普通 NSWindow 调整为非激活 NSPanel,窗口层级提升到状态栏级别,并补充 Transient / IgnoresCycle / FullScreenAuxiliary / CanJoinAllSpaces 行为,确保任意 App 全屏 Space 下也能显示录音胶囊。

构建

  • build: 20260518.1623

v2.1.1 (2026-02-27)

Bug 修复

  • 设置开关闪烁错误值:开机自启动、音效反馈、自动隐藏等开关在后端数据加载完成前不渲染,避免先显示默认值再跳变
  • 开机自启动开关重启后显示未开启:开关区域加 loading 守卫,后端返回真实状态后才渲染
  • 历史保留天数重启后回退默认:保留天数选择器同样加 loading 守卫
  • 热键显示为"Ctrl"而非"R-Ctrl":启动时从后端加载真实热键名称,默认右 Ctrl 正确显示为 R-Ctrl

v2.2.0 (2026-02-26)

新功能

  • macOS 支持 — 跨平台正式支持 macOS,与 Windows 功能对齐
  • 原生 AppKit + CoreGraphics 浮动指示器(胶囊样式,与 Windows 一致)
  • NSEvent 全局监听 + CGEventSource 修饰键轮询实现全局热键
  • CGEvent 模拟按键实现文字粘贴
  • 兼容 macOS 26,首次启动引导授予辅助功能权限
  • 关于页添加 GitHub 链接 — 点击可直接跳转项目仓库

改进

  • 移除旧版 C# 项目(VoiceSnap.Engine、VoiceSnapWPF),仓库仅保留 Go 版本
  • README 更新为跨平台文档

v2.1.0 (2026-02-26)

Bug 修复

  • 开机自启动开关不记忆:重启后开关状态从后端(注册表)加载,不再恢复默认值
  • 历史保留时长不记忆:修复"永久保留"(0天) 重启后回退为 30 天的问题
  • 设置项初始值不同步:音效反馈、自动隐藏开关也从后端加载真实状态
  • F10/F11/F12 快捷键名称错误:F10 显示为 "F:" 等乱码,改用 Sprintf 正确显示

新功能

  • 语气词自动过滤:识别结果自动去除"嗯、啊、呃、额、哦"等中文语气词和 um/uh/hmm 等英文填充词
  • 自由对讲静音自动停止:连续 3 秒无声自动结束录音并识别(含 2 秒开头保护期),无需手动按键停止
  • 胶囊指示器 DPI 自适应:根据系统 DPI 缩放胶囊大小、字体、动画,高分屏不再显示过小

v2.0.0 (2026-02-15) — Go 跨平台重写

VoiceSnap 2.0 使用 Go + Wails v3 + Svelte 从零重写,目标是更小体积、更优体验、未来跨平台。

重写亮点

  • 全新技术栈:从 C# WPF/.NET 8 迁移至 Go + Wails v3 + Svelte 5
  • 体积缩减 57%:运行文件从 ~80 MB 降至 ~34 MB(不含模型)
  • 内存优化:~400 MB(含模型),相比 WPF 版 ~500 MB
  • Apple Design UI:全新设计语言,白色卡片 + #f2f2f7 分组背景 + SVG 图标
  • 原生浮动指示器:Win32 GDI+ Layered Window,无焦点抢夺

新功能

  • 两种输入模式:长按说话 + 短按自由说话(WPF 版仅长按)
  • 录音音效反馈:马林巴风格双音提示(开始升调、完成降调),可在设置中关闭
  • 录音时长显示:指示器实时显示录音计时(0:00 格式),长按和自由说话模式均支持
  • Escape 取消录音:录音中按 Esc 立即取消,比组合键更直觉
  • 剪贴板保护:粘贴前保存旧剪贴板内容,粘贴后自动恢复
  • 识别历史:自动保存最近 50 条识别结果,支持复制、单条删除、清除所有,可设置保留时长(7/30/90天/永久)
  • 麦克风设备选择:下拉菜单列出所有输入设备,点击切换,选择自动保存
  • 中英混合优化:识别后自动在中英文/数字之间插入空格,句首字母自动大写,清理 SenseVoice 特殊标记
  • 指示器位置记忆:浮动指示器支持鼠标拖拽,位置自动保存到配置文件,下次启动恢复
  • 隐私声明:关于页展示离线/无需注册/开源三条隐私保证,让用户安心
  • 中英双语界面:自动跟随系统语言,托盘菜单同步本地化
  • 自定义快捷键:支持 Ctrl / Alt / Shift / 功能键 / 字母键 / 空格等

技术细节

模块 实现
音频录制 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

与 v1.x WPF 版对比

v2.0 Go v1.3.2 WPF
运行文件体积 ~34 MB ~80 MB
运行内存 ~400 MB ~500 MB
自由说话模式
录音音效 有(可关闭)
录音计时
Esc 取消
剪贴板保护
识别历史 有(50条)
麦克风切换
中英混合优化 有(自动加空格+大写)
指示器拖拽 有(位置记忆)
多语言 UI 中/英 中/英
跨平台 Windows + macOS 仅 Windows

v1.3.2 (2026-01-21) — WPF 版

  • 全链路异步化:识别+粘贴移至后台线程,彻底消除 UI 卡顿
  • 彻底移除 Python 依赖:纯原生 C# + C++ 引擎
  • 原生剪贴板重构:Win32 API,解决 CLIPBRD_E_CANT_OPEN
  • 新增"模拟打字"模式:解决同花顺等终端无法粘贴
  • 焦点保护:WS_EX_NOACTIVATE
  • 自动集成 VC++ Redistributable DLL

v1.3.1 (2026-01-02) — WPF 版

  • 修复剪贴板偶发锁定
  • 修复 Ctrl 键与粘贴操作冲突
  • 修复 ONNX Stream 内存泄漏
  • 新增安全粘贴机制
  • 新增空闲 30 秒自动内存回收

v1.3.0 — WPF 版

  • 新增 DirectML 硬件加速
  • 新增应用内自动更新
  • 新增 VAD 能量检测
  • 新增音频设备热插拔支持
  • 新增双地址模型下载备份