# Changelog ## 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 能量检测 - 新增音频设备热插拔支持 - 新增双地址模型下载备份