2026-06-28 首尾字修复
用户目标
- 当前使用版本
2.1.35 (build 20260623.1435) 经常出现语音输入首 1-2 个字和尾 1-2 个字丢失。
- 用户确认按已讨论方案修复:把 hold 模式的起始预采集和松键尾部采集保护从 X-ASR 专属扩展到所有可用模型。
当前起点
- 工作分支:
codex/x-asr-experiment-2.1.29
- 用户本机配置显示当前主要使用
sensevoice-zh,HotkeyMode 为 hold。
- 既有代码只有 X-ASR 实现了
HoldPreCaptureEngine 和 ReleaseTailCaptureEngine;SenseVoice / Qwen3-ASR / Moonshine / Parakeet 等离线模型未获得这些保护。
已完成事项
- 将 App 版本递增到
2.1.36 (build 20260628.2354)。
- 在
privatevoice.src/app.go 中新增默认松键尾部采集窗口 300ms。
- 对所有非 nil 引擎默认启用 hold 预采集,避免按住热键后 180ms 激活延迟吞掉开头语音。
- 对所有非 nil 引擎默认启用松键后 300ms 尾部采集,避免用户松键瞬间截断最后几个字。
- 保留引擎能力接口的显式优先级:如果某个引擎实现接口并返回关闭,则尊重该引擎配置。
- 更新
privatevoice.src/app_live_caption_test.go,覆盖默认开启、nil 引擎禁用、引擎显式关闭等路径。
- 更新
CHANGELOG.md、Info.plist、前端 package 版本元数据。
- 创建提交:
fc6d61e Fix hold recording head and tail clipping。
- 构建本地 arm64 验证 DMG:
/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation-2.1.36-build20260628.2354-arm64-local.dmg
- 兼容命名副本:
/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation-2.1.36-arm64-local.dmg
- SHA256:
6103208a226d644cce6958491ef0901094a2e54a036bae0c5de4bc1cd883ce6e
验证结果
go test -run 'TestReleaseTailCaptureDelay|TestHoldPreCapture|TestShouldStartHoldPreCaptureLocked|TestStartRecordingIgnoredWhileStoppingRecording|TestStartTapRecordingIgnoredWhileStoppingRecording' -count=1 . 通过。
go test ./... 通过。
npm run build 通过。
git diff --check 通过。
scripts/build-local-macos.sh arm64 通过,脚本完成本地签名、codesign 验证和 hdiutil verify。
- 验证中仍出现既有 warning:
- Go/macOS 链接目标版本 warning。
- 既有 Svelte a11y warning。
这些不是本轮改动引入。
未决问题
- 本轮只完成本地自动化验证,真实语音效果仍需用户在安装包上手工验证。
- 当前工作区存在大量历史未提交 / 未跟踪 / 删除状态文件,本轮未触碰、未回退、未纳入提交。
后续建议
- 用户重点验证 hold 模式下以下短句:
你看看
你看一下
技术总监让我问你一下
确认一下
可以了
好了呀
- 验证时特别测试两类边界:
- 按下热键立刻开口说话。
- 说完最后一个字立刻松开热键。