edit | blame | history | raw

2026-06-28 首尾字修复

用户目标

  • 当前使用版本 2.1.35 (build 20260623.1435) 经常出现语音输入首 1-2 个字和尾 1-2 个字丢失。
  • 用户确认按已讨论方案修复:把 hold 模式的起始预采集和松键尾部采集保护从 X-ASR 专属扩展到所有可用模型。

当前起点

  • 工作分支:codex/x-asr-experiment-2.1.29
  • 用户本机配置显示当前主要使用 sensevoice-zhHotkeyModehold
  • 既有代码只有 X-ASR 实现了 HoldPreCaptureEngineReleaseTailCaptureEngine;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.mdInfo.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 模式下以下短句:
  • 你看看
  • 你看一下
  • 技术总监让我问你一下
  • 确认一下
  • 可以了
  • 好了呀
  • 验证时特别测试两类边界:
  • 按下热键立刻开口说话。
  • 说完最后一个字立刻松开热键。