edit | blame | history | raw

Changelog

v2.1.36 (2026-06-28)

首尾字稳定性修复

  • Hold 模式首字保护扩展到所有模型:按下热键后立即启动本地预采集,确认不是组合键后保留这段音频,降低 SenseVoice / Qwen3-ASR / Moonshine / Parakeet 等离线模型开头 1-2 个字丢失的概率。
  • 松键尾部采集保护扩展到所有模型:松开热键后默认继续采集约 300ms 再停止录音,降低最后 1-2 个字被截断的概率。
  • 保留取消和组合键隔离:组合键或过早释放仍会丢弃预采集音频,不进入识别流程。

构建

  • build: 20260628.2354
  • 说明: 本版本为首尾字稳定性修复的本地验证候选包。

v2.1.35 (2026-06-23)

输入配置页排版优化

  • 语言选择改为紧凑网格:输入页语言列表从拥挤的多行 segmented control 调整为响应式网格,避免单个语言孤立成行。
  • 模型列表改为 grouped list:识别模型从多张独立卡片调整为统一分组列表,用内部分割线表达层级。
  • 当前模型状态减噪:当前模型只保留一个主要状态表达,减少蓝框、badge、禁用按钮同时出现造成的视觉负担。

构建

  • build: 20260623.1435
  • 说明: 本版本为输入配置页排版优化后的本地验收候选包。

v2.1.34 (2026-06-23)

输入配置页签拆分

  • 语言选择独立成输入页签:设置窗口新增“输入”页签,集中承载输入语言和离线识别模型选择。
  • 首页设置减负:首页保留热键、输入设备、提示音、剪贴板、开机启动和 Dock 图标等通用设置,减少语言区域拥挤感。
  • 保持配置结构不变:本版本只做阶段 1 信息架构拆分,不新增每语言默认模型、备用模型或自动模型选择配置。

构建

  • build: 20260623.1312
  • 说明: 本版本为输入配置页签拆分的本地验收候选包。

v2.1.33 (2026-06-23)

首启下载状态修复

  • 下载中不再误报失败:首启模型下载过程中,如果后端仍广播 need_model 状态,界面会继续保持下载态;只有下载调用真正失败或后端明确返回 error 时才显示失败。

构建

  • build: 20260623.1242
  • 说明: 本版本为首启下载状态修复的本地验收候选包,基于 v2.1.32 多语种扩展候选包继续修复。

v2.1.32 (2026-06-23)

多语种扩展候选包

  • 欧洲五语正式语言基础:新增 French、German、Spanish、Italian、Portuguese 语言版本,并将 Parakeet TDT v3 作为默认离线模型候选。
  • 日语 / 韩语正式语言基础:新增 Japanese、Korean 语言版本,分别接入日语 Zipformer ReazonSpeech 和韩语 Zipformer 专项模型。
  • 动态语言选择:设置页语言列表改为由后端语言 profile 动态返回,避免继续硬编码中文 / English。
  • 多语种模型校验:新增 Parakeet TDT v3、日语 Zipformer、韩语 Zipformer 的模型文件校验和默认模型回退测试。
  • 本地化基础:新增 frdeesitptjako locale 文件,暂以核心设置页文案和英文 fallback 支撑验收。

构建

  • build: 20260623.0012
  • 说明: 本版本为多语种扩展本地验收候选包;Canary / Whisper benchmark、真实语音 QA 和完整人工翻译仍需发布前补齐。

v2.1.31 (2026-06-14)

X-ASR 实验修复

  • X-ASR 首字保护:hold 模式在按下热键时立即开始预采集音频,确认不是组合键后再显示浮窗并进入正式录音,降低“你看看”等短句首字丢失概率。
  • 组合键与短按隔离:预采集阶段检测到组合键或用户过早松开热键时会丢弃音频,不进入识别流程。
  • X-ASR 开头上下文 padding:X-ASR streaming session 首次接收音频时补 250ms 前置静音,提升贴近开头的短音节稳定性。
  • 取消路径加固:Escape 取消会停止实时字幕 session,并阻止同一次按住手势在 debounce 后重新启动录音;引擎不可用时仍允许已有录音释放/取消清理完成。
  • 隔离范围:首字保护能力仅由 X-ASR streaming engine 启用;SenseVoice、Qwen3-ASR、Moonshine、Parakeet 不启用预采集路径。

构建

  • build: 20260614.2056
  • 说明: 本版本为 X-ASR 首字/尾字稳定性实验测试包,不是 App Store 正式上传包。

v2.1.30 (2026-06-07)

X-ASR 实验修复

  • X-ASR 尾句保护:最终识别前追加 1.5 秒静音 padding,并保留 decode 过程中的最后一个非空结果,减少松开热键时最后一句丢失的问题。
  • 录音中实时字幕:X-ASR 录音时复用现有动态浮窗显示小号实时字幕;松开热键后浮窗切到“识别中/完成”,最终文本仍按原流程粘贴到目标 App。
  • 流式 session 接口:新增 streaming engine/session 抽象,当前只由 X-ASR 使用;SenseVoice、Qwen3-ASR、Moonshine、Parakeet 行为保持不变。
  • 录音增量读取:Recorder 支持安全读取新增 PCM 样本,用于低延迟字幕,不影响最终录音样本收集。
  • macOS 上屏安全同步:同步正式上架线的剪贴板校验与代际保护,降低关闭“保留到剪贴板”时误粘旧内容的风险。

构建

  • build: 20260613.2201
  • 说明: 本版本为 X-ASR 实时字幕与尾句修复实验候选包,不是 App Store 正式上传包。

v2.1.29 (2026-06-07)

实验候选包

  • X-ASR 960ms 实验模型:新增 x-asr-zh-en-960ms 实验模型 profile,用于评估中英混输和未来“边说边出字”方向。
  • macOS X-ASR streaming backend:在 macOS 下接入 sherpa-onnx 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 源码基线。

构建

  • build: 20260607.0147
  • 说明: 本版本为 X-ASR 技术实验候选包,不是 App Store 正式上传包。

v2.1.28 (2026-06-04)

发布冻结

  • App Store 发布冻结版本:冻结上一轮关于页审核信息补全后的代码,准备进入 Mac App Store 发布流程。
  • 发布资料准备:补充市场发布交接材料、App Store 元数据草稿、隐私与审核说明、构建与上传前置条件清单。

构建

  • build: 20260604.0049
  • 说明: 本版本为 Mac App Store 发布冻结基线;本机可生成 App Store sandbox POC 包,真正上传包仍需 Apple Distribution / 3rd Party Mac Developer Installer 证书与 App Store Connect 账号。

v2.1.27 (2026-06-03)

QA 候选包

  • 关于页审核信息补全:关于页显示 私语输入法 (PrivateVoice Dictation)、离线识别说明、数据不出设备声明、开源项目归属、版权许可、隐私政策和支持反馈链接。
  • 苹果审核链接更新:版权许可、隐私政策、支持反馈统一指向 privatevoice-dictation-support 支持站点;保留 VoiceSnap 原项目地址入口。
  • 英文界面同步:English 关于页同步展示等价隐私与许可说明,避免系统语言为英文时仍显示旧审核信息。

构建

  • build: 20260603.2238
  • 说明: 本版本为关于页审核信息补全后的用户验收候选包。

v2.1.26 (2026-06-03)

修复

  • macOS App 名称按系统语言本地化:中文系统显示 私语输入法,英文系统显示 PrivateVoice Dictation
  • 麦克风权限提示本地化:中文系统下麦克风授权文案改为中文。
  • macOS 构建脚本复制本地化资源:本地、正式、App Store POC 和 Developer ID sandbox 构建都会把 *.lproj/InfoPlist.strings 打入 .app/Contents/Resources

构建

  • build: 20260603.2151

v2.1.25 (2026-06-03)

QA 候选包

  • 中文界面品牌文案本地化:中文语言版本下,侧栏和关于页显示 私语输入法永远离线·稳定极速
  • 关于页中文卖点调整:中文关于页卖点改为 私密离线 · 自定义词库 · 保护隐私真正属于你的语音输入法
  • 英文正式名保留:macOS App 正式包名和英文界面仍保持 PrivateVoice Dictation

构建

  • build: 20260603.2102
  • 说明: 本版本为中文界面品牌文案修正后的用户验收候选包。

v2.1.24 (2026-06-03)

QA 候选包

  • 品牌命名调整:App 正式名称从 PrivateVoice Input 改为 PrivateVoice Dictation,同步 macOS App bundle、DMG 文件名、Info.plist、Wails 构建配置和用户可见文案。
  • 侧栏 Logo 区调整:左侧品牌区只显示 PrivateVoice,下方小字显示 Private. Offline.
  • 升级兼容保护:本轮不迁移用户数据目录,继续使用既有 Application Support/PrivateVoice Input,避免影响历史记录、模型文件和系统权限。

构建

  • build: 20260603.1934
  • 说明: 本版本为 Round 5 后追加的 UI/品牌命名验收候选包。

v2.1.23 (2026-06-03)

QA 候选包

  • Round 5 Qwen3-ASR 中文高级模型:中文语言版本新增 qwen3-asr-0.6b 可选高级模型,默认模型仍保持 sensevoice-zh
  • Qwen3-ASR backend:升级 sherpa-onnx-go*v1.13.2,接入 OfflineQwen3ASRModelConfig,支持 conv_frontend.onnxencoder.int8.onnxdecoder.int8.onnxtokenizer/ 目录结构。
  • 大模型下载稳定性:模型下载增加重试和 Range 断点续传,降低大文件下载被连接重置或 TLS 超时打断后的失败概率。
  • 模型状态同步修复:engine reload 后主动向前端推送 engine:status,避免设置页模型卡片和底部 Engine 信息显示不同步。
  • 回归保护:SenseVoice、Moonshine、Parakeet 三条旧模型路径均已完成加载和识别回归。

构建

  • build: 20260603.1904
  • 说明: 本版本为 Round 5 QA 修复后的用户验收候选包,用于验证 Qwen3-ASR、模型切换和断网识别。

v2.1.22 (2026-06-03)

QA 候选包

  • Round 4 Parakeet English 高级模型:English 语言版本新增 parakeet-en 可选高级模型,默认模型仍保持 moonshine-en
  • Nemo Transducer backend:macOS sherpa-onnx 接入 Parakeet NeMo Transducer 配置,支持 encoder.int8.onnxdecoder.int8.onnxjoiner.int8.onnxtokens.txt 四文件结构。
  • 模型选择 UI:设置页新增 English 模型选择卡片,支持 Moonshine 与 Parakeet 下载、切换、当前状态展示和进度展示。
  • 语言隔离保护:手动选择的模型必须兼容当前语言;切回中文后继续使用 SenseVoice 默认路径,不让 English 模型污染中文配置。
  • 下载失败保护:Parakeet 下载中断后不会破坏当前 Moonshine/SenseVoice;下一次同模型下载前会清理旧 partial,避免残留大体积临时目录。
  • 真机 QA:已完成 Parakeet 真实下载、加载、英文识别、断网英文识别、重启持久化、Moonshine 回退、中文 SenseVoice 回归和用户数据保护验证。

构建

  • build: 20260603.1608
  • 说明: 本版本为 Round 4 QA 通过后的测试包候选,待生成 DMG、release manifest、验证并打 tag 后交付用户验收。

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.18 (2026-06-01)

改进

  • 统一权限页字体层级:收敛权限页标题、摘要、权限项标题、按钮和状态文字的字号与字重,使其与其他设置页保持一致。

构建

  • build: 20260601.1905

v2.1.17 (2026-05-31)

改进

  • 防止历史页清理菜单文案换行:加宽底部“清理”下拉菜单,并保持清理选项单行显示,避免“清除已导出 CSV 的历史”断行。

构建

  • build: 20260531.1359

v2.1.16 (2026-05-31)

改进

  • 调整历史页清理入口位置:将“清理”菜单从顶部工具栏移动到底部分页区域左侧,减少顶部操作拥挤,并让清理确认提示跟随底部入口显示。

构建

  • build: 20260531.1131

v2.1.15 (2026-05-31)

改进

  • 历史页增加基础分页与存储安全提示:历史页改为后端分页加载,每页固定 100 条,并新增历史文件大小、打开所在文件夹、清除已导出 CSV 历史和基于全量统计的导出菜单状态。
  • 用户词库列表增加基础分页:词库页改为后端分页加载,每页固定 100 条,避免词库规则过多时一次性渲染整张列表。

构建

  • build: 20260531.1102

v2.1.14 (2026-05-31)

改进

  • 统一应用内图标视觉:设置页侧边栏、About 页和首次设置页改用与 Dock 一致的蓝色麦克风图标,移除 P / V 字母图标。

构建

  • build: 20260531.0120

v2.1.13 (2026-05-30)

改进

  • 历史勘误 CSV 支持未处理增量导出:历史记录新增 exportedAt,导出勘误 CSV 可选择“今天未处理 / 近 7 天未处理 / 全部未处理”,成功写入 CSV 后才标记本次历史,避免下次重复导出旧记录。
  • 优化勘误表预览明细排序:导入预览优先展示新增、冲突、无效、超限和重复等关键项,空项排到最后,摘要统计仍包含全部候选。

构建

  • build: 20260530.1949

v2.1.12 (2026-05-30)

改进

  • 调整词库页导入导出按钮:用户词库按钮改名为“导入用户词库 / 导出用户词库”并放在一起,“导入勘误表”移动到工具栏最右侧。

构建

  • build: 20260530.1800

v2.1.11 (2026-05-30)

改进

  • CSV 勘误表改为中文表头:导出的勘误 CSV 使用 记录ID识别时间识别历史文本错误词/正确词 等中文列名,样例行文案改为“正确的格式是点 CSV”,并保持导入端兼容旧版英文表头。

构建

  • build: 20260530.1757

v2.1.10 (2026-05-30)

Bug 修复

  • 修复历史保留时长不生效:移除后端固定最多 50 条历史的硬截断,识别历史现在会按用户选择的 7 天、30 天、90 天或永久真实保留。
  • 修复历史文件清理不及时:新增历史、读取历史和切换保留时长时都会按当前保留规则清理过期记录,并同步保存到 history.json

改进

  • 展示历史保存位置:历史页面新增 history.json 保存路径展示,长路径单行省略但可复制完整路径,避免撑坏页面布局。
  • 新增历史勘误 CSV 流程:历史页可导出勘误 CSV,词库页可导入勘误表并先预览新增、重复、冲突、无效、空项和超限统计,确认后只追加新增规则。
  • 增强词库写入安全:CSV 勘误导入采用批量追加和写入失败整体回滚,避免半写入;新写入的 history.jsonuserdict.json 权限收紧到 0600

构建

  • build: 20260530.1640

v2.1.9 (2026-05-28)

改进

  • 产品改名为 PrivateVoice Input / 私语输入:更新应用可见名称、窗口标题、打包元数据、启动项名称、单实例锁和系统数据目录。
  • 更新 About 信息:关于页展示“永远离线·稳定极速 / Private.Offline”以及 MIT License 二次开发声明和支持页面链接。
  • 保留旧用户数据迁移:新数据目录会从旧 VoiceSnap 应用支持目录迁移配置、词库、历史和模型文件,已存在的新文件不会被覆盖。

构建

  • build: 20260528.1206

v2.1.8 (2026-05-19)

Bug 修复

  • 修复长按松手后悬浮窗可能停在录音态:松手后立即切到“识别中”,音频设备停止和采样转换改为后台执行,避免底层音频 stop 偶发卡住导致浮窗假死。
  • 修复右 Alt 状态可能残留:macOS 侧按键检测会用系统实时 Option flags 校正旧事件态,防止 release 事件异常时误判为仍在按住。

构建

  • build: 20260519.1818

v2.1.7 (2026-05-19)

Bug 修复

  • 修复多屏输入时悬浮动效跑到别的屏幕:macOS 录音动效现在优先跟随当前辅助功能焦点窗口,其次跟随前台 App 窗口,再兜底鼠标所在屏幕。

构建

  • build: 20260519.1603

v2.1.6 (2026-05-18)

Bug 修复

  • 优化点按结束手感:录音中第二次按下热键即刻停止,不再等到松开;“完成”状态自动隐藏缩短到 250ms。
  • 修复 macOS 长按启动不稳:右 Alt 的事件态不再 250ms 后过期,长按启动阈值调整为 180ms。

构建

  • build: 20260518.2229

v2.1.5 (2026-05-18)

改进

  • 重做 macOS 录音悬浮动效:从黑色胶囊改为透明无边界的蓝粉光波样式,保留中心跳动元素与录音计时。
  • 优化多显示器定位:拖拽保存、启动还原和默认显示位置按对应屏幕处理,避免副屏或垂直排列屏幕下悬浮窗跳回主屏。

构建

  • build: 20260518.2205

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