系列第 9 篇。比赛现场最好的输入方式不是唯一的。语音适合双手不方便时手表适合安静场景下的快速按钮两者应该共用同一套计分动作。一、真实问题背景在羽毛球双打现场计分员可能正在看球、捡球、和队友沟通。拿起手机并不总方便。语音输入可以说“甲队加一分”手表可以直接点 A 队 1这两种入口都能降低打扰。但是入口越多越容易产生重复动作、误识别和状态不一致。所以双入口设计不能让语音和手表各写一套逻辑而应统一到计分动作服务。二、目标与边界本文目标是设计一个低打扰计分体系1. 语音识别负责把自然语言转成动作。2. 手表按钮负责提交明确动作。3. 手机端统一校验、更新比分、播报结果。4. 失败时回到手动计分不阻断比赛。边界是当前基础版不引入服务器语音服务不依赖在线识别不把语音结果直接写入比分。所有动作都要经过手机端确认或校验。三、当前工程的语音基础项目已经有两个语音相关服务common/src/main/ets/service/ScoreSpeechService.ets common/src/main/ets/service/ScoreVoiceRecognitionService.ets前者负责 TTS 播报后者使用kit.CoreSpeechKit的识别能力和kit.AudioKit的采集能力。语音入口后续可以先识别关键词再映射成动作。export interface ScoreVoiceRecognitionCallbacks { onCommand(text: string): void; onError(message: string): void; }四、语音不应直接加分语音识别可能出现误差。比如“乙队加一分”被识别成“A 队加一分”如果直接写比分现场很难追踪错误来源。更稳的流程是语音文本 解析为候选动作 页面显示短确认 确认后提交 ScoreActionService 更新比分并播报对于非常明确的短命令也可以允许自动执行但必须支持撤销。五、手表动作更明确但也要防重复手表按钮比语音更确定但也可能因为网络抖动、设备重连或连续点击产生重复动作。每个动作应带actionId。interface ScoreInputAction { id: string; source: watch | voice | phone; sessionId: string; matchId: string; type: teamAPlus | teamBPlus | undo | finish; createdAt: number; }手机端收到动作后先查最近处理记录重复 ID 直接忽略。六、统一动作服务的价值无论入口来自手机按钮、语音还是手表都应该调用同一个服务const ok ScoreActionService.apply(action); if (ok) { ScoreSpeechService.speak(当前比分 9 比 7); }这样计分规则、撤销栈、结束比赛、播报策略都集中管理。页面只负责把用户意图转成ScoreInputAction。七、失败降级策略现场工具最怕“功能失败影响比赛”。因此语音和手表都要设计降级1. 语音识别失败关闭语音入口保留手动计分。2. 手表断开手机端继续计分。3. TTS 创建失败关闭播报不影响比分。4. 动作冲突保留最新手机端状态提示用户核对。当前ScoreSpeechService已经有available标记失败后不会反复阻塞页面这个思路也适合语音识别服务。八、官方参考语音识别、音频采集和 TTS 都应以 HarmonyOS 官方 Kit 文档为准。本文重点是工程边界入口可以多状态写入必须统一。华为开发者文档HarmonyOS 应用开发九、工程验收清单-common/src/main/ets/service/ScoreSpeechService.ets能独立处理 TTS 播报失败。-common/src/main/ets/service/ScoreVoiceRecognitionService.ets已封装语音识别入口。-features/src/main/ets/scoring/LiveScoringPage.ets有撤销、结束、直接录入比分能力。-common/src/main/ets/storage/SessionStore.ets能持久化对局详情。- 后续新增ScoreActionService时手机、语音、手表都应走同一动作接口。- 验证时间2026-06-29当前工程目标包含 HarmonyOS 6.0/API 20昨日 Hvigor 构建已验证BUILD SUCCESSFUL。十、小结语音和手表双入口的关键是“入口分散动作统一”。语音负责识别手表负责快速按钮手机端负责权威状态和失败降级。这样才能在比赛现场真正降低打扰而不是制造新的混乱。十一、下一篇衔接入口变多之后数据同步和冲突合并就变得重要。下一篇收束到本地优先同步策略离线恢复、冲突合并和隐私边界。