edit | blame | history | raw

PrivateVoice

PrivateVoice 是一款离线语音转文字桌面 App:按住快捷键说话,松开后本地识别并输入到当前应用。当前源码位于 C1.source/privatevoice.src

PrivateVoice

当前迁移基线

  • 分支:codex/x-asr-experiment-2.1.29
  • Commit:0ffbf1935c9d091cce22a5583275ac0902f7a693
  • Tag:v2.2.0-build20260702.0303-real-user-test
  • 包类型:真实用户测试候选包,不是 notarized 官网正式发布包。
  • 迁移后源码根:C1.source/privatevoice.src
  • 最新候选包本地路径:C2.builds/PrivateVoice-Dictation-2.2.0-build20260702.0303/

核心能力

  • 完全离线识别,模型本地推理。
  • 长按说话与短按自由说话两种输入模式。
  • 自定义快捷键、麦克风选择、录音音效、录音计时、Esc 取消。
  • 剪贴板保护、识别历史、用户词库、语气词过滤和中英混合文本后处理。
  • macOS 本地签名 DMG、Windows amd64 preview ZIP。
  • 当前 Round 6 已新增独立 粤语 语言选项,默认模型为 SenseVoice Yue 2025-09-09

语言与模型状态

输入语言 / 场景 当前支持状态 默认 / 可选模型 说明
中文 正式支持 默认 SenseVoice;可选 Qwen3-ASR;实验 X-ASR zh-en 960ms 中文听写和中英混输主路径。
粤语 真实用户测试候选 默认 SenseVoice Yue 2025-09-09 独立语言 profile:yue-HK,engine 参数固定 yue
English 正式支持 默认 Moonshine English;可选 Parakeet English;实验 X-ASR zh-en 960ms 英文听写主路径。
French / German / Spanish / Italian / Portuguese 正式支持 Parakeet TDT v3 欧洲五语离线识别。
Japanese 正式支持 Zipformer Japanese 日语专项模型。
Korean 正式支持 Zipformer Korean 韩语专项模型。
Windows preview 技术预览 SenseVoice only 非 SenseVoice 模型可见但禁用;Windows 包未签名。

开发入口

cd /Users/ar/Projects/PrivateVoice/03-O/C1.source/privatevoice.src
npm --prefix frontend run build
go test ./...

常用打包和 QA 命令见 CODEGRAPH.mdK2.项目管理/QA地图.mdK2.项目管理/发布地图.md

目录

03-O/
├── C1.source/privatevoice.src/   源码根
├── C2.builds/                    本地迁移的最新候选包,二进制包不纳入 Git 提交
├── C3.tools/                     工具索引
├── K1.业务知识/                  成果地图和长期业务/技术知识
├── K2.项目管理/                  QA、发布、迁移、handoff、legacy 资料
├── K3.运营与发布资料/            当前运营资料索引和本地素材
└── CODEGRAPH.md                  人工工程地图
edit | blame | history | raw

Changelog

v2.2.2 (2026-07-03)

性能与稳定性恢复

  • 恢复 2.2.1 本地体验包中的性能修复:合入慢识别诊断、流水线耗时记录、识别 benchmark 工具和诊断服务,用于定位模型、录音、识别、粘贴和 UI 生命周期耗时。
  • 强化引擎生命周期保护:补入引擎重载串行化、释放保护和跨平台占位实现,降低频繁切换语言 / 模型或长时间运行时的状态竞争风险。
  • 补入录音、热键、overlay 和事件订阅清理:收敛 recorder、hotkey、overlay 与前端事件订阅的生命周期泄漏风险,改善长时间真实使用稳定性。
  • 保留正式版本口径:本版本恢复的是 2.2.1 build 20260702.1737 的修复内容,但正式候选版本升为 2.2.2,避免与旧 macOS arm64 local 体验包混淆。

构建

  • build: 20260703.0335
  • 说明: 本版本为 2.2.1 性能 / 稳定性修复恢复后的正式候选源码目标;进入四包冻结前仍需代码审核、QA 和发布门禁。

v2.2.0 (2026-07-02)

粤语语言版本

  • 新增粤语语言选项:输入配置页语言列表新增 粤语,位置紧跟 中文
  • 新增 SenseVoice Yue 模型 profile:接入 sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09,作为粤语默认离线模型。
  • 固定粤语识别语言参数:粤语模型加载时显式设置 SenseVoice language=yue,避免走默认自动识别。
  • 收敛粤语模型列表:粤语语言下只展示粤语默认模型,不把 Qwen3-ASR / X-ASR 作为粤语专项模型展示。
  • 补充回归测试:覆盖粤语语言 profile、模型校验、模型选择、engine 配置、前端构建和 Windows 交叉编译。

构建

  • build: 20260702.0303
  • 说明: 本版本为 Round 6 粤语语言版本真实用户测试候选包基线,已完成代码审核和 QA 回归。

v2.1.40 (2026-07-02)

多平台测试包整理

  • 同步 macOS 与 App 版本元数据:将 macOS Info.plist 与 App 内显示版本统一到 2.1.40 (build 20260702.0143),避免 macOS 包继续显示旧 build。
  • 新增 macOS universal 本地 DMG 构建入口:可在同一 build 下生成 arm64x86_64universal 三种 macOS DMG,方便分别验证 Apple Silicon、Intel Mac 和双架构通用包。
  • 继续提供 Windows x64 预览包:保留 2.1.39 的 Windows 炫彩 overlay 预览能力,并统一升级到本次 build。
  • Release 目录收敛:本版本作为整理后的最新版四包基线,旧产物统一归档到 X-旧版build成果

构建

  • build: 20260702.0143
  • 说明: 本版本为 macOS 三架构 DMG + Windows x64 预览 zip 的多平台测试包整理基线。

v2.1.39 (2026-07-01)

Windows 动态指示视觉升级

  • Windows overlay 升级为轻量炫彩胶囊:保留原生 Win32 overlay 路线,不改热键、录音和识别链路,只提升视觉表现。
  • 胶囊窗口更轻更透:降低背景不透明度,加入更柔和的边框和内层高光,减轻之前厚重发闷的观感。
  • 柱条动画更接近 macOS 风格:柱条从 5 根扩展到 11 根,录音/处理中加入更丰富的动态起伏、光谱过渡和发光层。
  • 仍保留 Windows 原生行为:继续使用现有顶层窗、非激活、拖拽和定位逻辑,避免把视觉升级扩大成平台重构。

构建

  • build: 20260701.2356
  • 说明: 本版本为 Windows 动态指示视觉升级后的预览候选包。

v2.1.38 (2026-06-29)

性能诊断

  • 新增识别流水线性能日志:为录音尾部等待、停止录音、语音检测、模型识别、文本后处理、历史写入、热键释放等待、粘贴和总耗时加入 PERF 分段日志。
  • 新增 macOS 粘贴链路性能日志:记录辅助权限检查、剪贴板快照、写入剪贴板、剪贴板校验和 Cmd+V 的耗时,用于判断慢感是否来自粘贴安全链路。
  • 保持识别行为不变:本版本只增加诊断日志,不调整首尾字保护、模型选择、识别参数或 UI 行为。

构建

  • build: 20260629.2014
  • 说明: 本版本为性能回退排查诊断候选包,用于真实使用几天后分析慢在识别、尾部等待还是粘贴链路。

Windows 技术预览

  • 新增 Windows 预览构建脚本privatevoice.src/scripts/build-windows-preview.sh 可生成 Windows x64 预览目录和 zip。
  • 内置 Windows 真机 QA 采集脚本:预览包包含 QA-WINDOWS-PREVIEW.ps1,用于采集 WebView2 / 音频端点预检信息、启动 App、打开 Notepad 目标文件、提示完成一次听写,并收集日志和目标文本证据。
  • 新增双击 QA 启动器:预览包包含 RUN-WINDOWS-QA.cmd,便于 Windows 测试者直接启动 QA 流程。
  • 新增 Windows QA 证据验证脚本privatevoice.src/scripts/verify-windows-qa-evidence.sh 可检查返回的 qa-evidence-*.zip 是否证明启动、引擎、录音、识别和上屏。
  • 预览版只开放 SenseVoice:Windows build 中其他模型仍可见但置灰禁用,避免用户选择尚未验证的模型导致启动或识别失败。
  • 打包 sherpa/onnxruntime 运行时 DLL:预览包包含 onnxruntime.dllsherpa-onnx-c-api.dllsherpa-onnx-cxx-api.dll
  • 交付边界:该产物是 Windows 技术预览,不是已签名安装器,也未完成 Windows 10/11 真机 QA。

v2.1.37 (2026-06-29)

双构建线

  • 默认 macOS 14+ 构建继续支持 Qwen3-ASR:主 go.mod 保持当前 sherpa-onnx 依赖线,中文高级模型能力不回退。
  • 新增 Monterey 兼容构建线:新增 monterey_compat 构建标签和 go.monterey.mod,使用 macOS 11 兼容的旧版 sherpa/onnxruntime。
  • 兼容包中 Qwen3-ASR 置灰禁用:Qwen3-ASR 不隐藏,仍显示在中文模型列表中,但标记为不可用并提示需要 macOS 14 或更高版本。
  • 构建最低系统版本分离:默认构建声明 macOS 14.0 起,Monterey 兼容脚本覆盖为 macOS 11.0 起。

构建

  • build: 20260629.0059
  • 说明: 本版本为双构建线和 Monterey 兼容本地验证候选包。

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

Copyright (c) 2025 vorojar

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
AGENTS 572 b
C1.source/AGENTS 1 KB
C1.source/CODEGRAPH 2 KB
C1.source/privatevoice.src/frontend/instructions 76 b
C1.source/privatevoice.src/instructions 3 KB
C1.source/privatevoice.src/testdata/round1/README 1 KB
C1.source/privatevoice.src/testdata/round1/models-incomplete-missing-model/sensevoice-zh/tokens 7 b
C1.source/privatevoice.src/testdata/round1/models-valid-legacy/sensevoice/tokens 7 b
C1.source/privatevoice.src/testdata/round1/models-valid-new/sensevoice-zh/tokens 7 b
C1.source/privatevoice.src/testdata/round1/models-zero-byte/sensevoice-zh/tokens 7 b
C1.source/privatevoice.src/testdata/round1/state-points-to-broken/broken/tokens 7 b
C1.source/privatevoice.src/testdata/round1/state-points-to-broken/sensevoice/tokens 7 b
C1.source/privatevoice.src/testdata/round1/state-points-to-legacy/sensevoice/tokens 7 b
C2.builds/PrivateVoice-Dictation-2.2.0-build20260702.0303/RELEASE_MANIFEST 3 KB
C2.builds/PrivateVoice-Dictation-2.2.0-build20260702.0303/SHA256SUMS 535 b
C2.builds/README 595 b
C3.tools/README 455 b
CHANGELOG 34 KB
CODEGRAPH 2 KB
K1.业务知识/README 489 b
K1.业务知识/成果地图 1 KB
K2.项目管理/QA地图 672 b
K2.项目管理/QA成果地图 700 b
K2.项目管理/R221-1-开发自查 5 KB
K2.项目管理/R221-3-QA-evidence 7 KB
K2.项目管理/README 424 b
K2.项目管理/handoffs/2026-07-02-迁移交接 2 KB
K2.项目管理/legacy/02-P-NBL/engineering-plan 15 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260603-directory-consolidation 3 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260603-independent-repo-and-archive 2 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260604-mac-app-store-category-hotfix 1 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260604-mac-app-store-release-freeze 4 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260605-mac-app-store-application-identifier-hotfix 2 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260605-mac-app-store-clean-rebuild 2 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260605-mac-app-store-quarantine-hotfix 2 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260605-mac-app-store-upload-preflight 5 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260607-x-asr-experiment-branch 2 KB
K2.项目管理/legacy/02-P-NBL/freeze/20260607-x-asr-experimental-build 2 KB
K2.项目管理/legacy/02-P-NBL/plan 14 KB
K2.项目管理/legacy/02-P-NBL/product-plan 12 KB
K2.项目管理/legacy/02-P-NBL/round-1/README 975 b
K2.项目管理/legacy/02-P-NBL/round-1/dev-checklist-current 6 KB
K2.项目管理/legacy/02-P-NBL/round-1/dev-checklist 4 KB
K2.项目管理/legacy/02-P-NBL/round-1/engineering-tasks 10 KB
K2.项目管理/legacy/02-P-NBL/round-1/prd 28 KB
K2.项目管理/legacy/02-P-NBL/round-1/qa-handoff-current 3 KB
K2.项目管理/legacy/02-P-NBL/round-1/qa-precheck-current 5 KB
K2.项目管理/legacy/02-P-NBL/round-1/qa-report-20260602-2.1.19 15 KB
K2.项目管理/legacy/02-P-NBL/round-1/qa-report-template 4 KB
K2.项目管理/legacy/02-P-NBL/round-1/qa-test-plan 8 KB
K2.项目管理/legacy/02-P-NBL/round-1/todo-list 7 KB
K2.项目管理/legacy/02-P-NBL/round-2/README 1 KB
K2.项目管理/legacy/02-P-NBL/round-2/dev-checklist-current 2 KB
K2.项目管理/legacy/02-P-NBL/round-2/engineering-tasks 8 KB
K2.项目管理/legacy/02-P-NBL/round-2/logs/qa-runtime/current-run-id 16 b
K2.项目管理/legacy/02-P-NBL/round-2/prd 9 KB
K2.项目管理/legacy/02-P-NBL/round-2/qa-handoff-current 3 KB
K2.项目管理/legacy/02-P-NBL/round-2/qa-precheck-current 3 KB
K2.项目管理/legacy/02-P-NBL/round-2/qa-report-current 6 KB
K2.项目管理/legacy/02-P-NBL/round-2/qa-test-plan 7 KB
K2.项目管理/legacy/02-P-NBL/round-2/todo-list 2 KB
K2.项目管理/legacy/02-P-NBL/round-3/README 2 KB
K2.项目管理/legacy/02-P-NBL/round-3/code-review-current 1 KB
K2.项目管理/legacy/02-P-NBL/round-3/dev-checklist-current 2 KB
K2.项目管理/legacy/02-P-NBL/round-3/engineering-tasks 9 KB
K2.项目管理/legacy/02-P-NBL/round-3/prd 11 KB
K2.项目管理/legacy/02-P-NBL/round-3/qa-handoff-current 3 KB
K2.项目管理/legacy/02-P-NBL/round-3/qa-precheck-current 2 KB
K2.项目管理/legacy/02-P-NBL/round-3/qa-report-current 4 KB
K2.项目管理/legacy/02-P-NBL/round-3/qa-test-plan 7 KB
K2.项目管理/legacy/02-P-NBL/round-3/todo-list 2 KB
K2.项目管理/legacy/02-P-NBL/round-4/README 2 KB
K2.项目管理/legacy/02-P-NBL/round-4/code-review 2 KB
K2.项目管理/legacy/02-P-NBL/round-4/dev-self-check 3 KB
K2.项目管理/legacy/02-P-NBL/round-4/engineering-tasks 5 KB
K2.项目管理/legacy/02-P-NBL/round-4/prd 6 KB
K2.项目管理/legacy/02-P-NBL/round-4/qa-handoff 3 KB
K2.项目管理/legacy/02-P-NBL/round-4/qa-report 5 KB
K2.项目管理/legacy/02-P-NBL/round-4/qa-test-plan 4 KB
K2.项目管理/legacy/02-P-NBL/round-4/todo-list 2 KB
K2.项目管理/legacy/02-P-NBL/round-5/README 3 KB
K2.项目管理/legacy/02-P-NBL/round-5/dev-check-report 2 KB
K2.项目管理/legacy/02-P-NBL/round-5/engineering-tasks 6 KB
K2.项目管理/legacy/02-P-NBL/round-5/prd 7 KB
K2.项目管理/legacy/02-P-NBL/round-5/qa-handoff 1 KB
K2.项目管理/legacy/02-P-NBL/round-5/qa-report 4 KB
K2.项目管理/legacy/02-P-NBL/round-5/qa-test-plan 5 KB
K2.项目管理/legacy/02-P-NBL/round-5/todo-list 3 KB
K2.项目管理/legacy/02-P-NBL/round-6/README 1 KB
K2.项目管理/legacy/02-P-NBL/round-6/requirements-dev 14 KB
K2.项目管理/legacy/02-P-NBL/round-6/todo-dev 4 KB
K2.项目管理/legacy/02-P-NBL/x-asr-realtime-insertion-report 11 KB
K2.项目管理/legacy/Docs/KM2.项目管理-非业务直接相关/AppStore审核拒绝-20260610 9 KB
K2.项目管理/legacy/Docs/KM2.项目管理-非业务直接相关/AppStore打包连续返工经验教训-20260611 8 KB
K2.项目管理/legacy/Docs/KM2.项目管理-非业务直接相关/QA工作-经验与教训 3 KB
K2.项目管理/legacy/TODO-旧任务清单 19 KB
K2.项目管理/restore-notes 931 b
K2.项目管理/session-topics/00-Topics 1 KB
K2.项目管理/session-topics/AppStore与独立站 1 KB
K2.项目管理/session-topics/Windows预览 937 b
K2.项目管理/session-topics/发布与打包 990 b
K2.项目管理/session-topics/多语种与粤语 1 KB
K2.项目管理/session-topics/性能与稳定性 876 b
K2.项目管理/发布地图 1 KB
K2.项目管理/接收验证记录 2 KB
K2.项目管理/新窗口接手指南 1 KB
K2.项目管理/研发交付验收流程 481 b
K2.项目管理/迁移资产清单 2 KB
K2.项目管理/项目经理-经验与教训 361 b
K3.运营与发布资料/README 509 b
K3.运营与发布资料/legacy-运营资料/README 482 b
README 3 KB