羽毛球工具 App HarmonyOS 6.0 实战(09/10):语音手表双入口计分

系列第 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 文档为准。本文重点是工程边界:入口可以多,状态写入必须统一。
九、工程验收清单
- 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。
十、小结
语音和手表双入口的关键是“入口分散,动作统一”。语音负责识别,手表负责快速按钮,手机端负责权威状态和失败降级。这样才能在比赛现场真正降低打扰,而不是制造新的混乱。
十一、下一篇衔接
入口变多之后,数据同步和冲突合并就变得重要。下一篇收束到本地优先同步策略:离线恢复、冲突合并和隐私边界。
更多推荐

所有评论(0)