【HarmonyOS 6.1 全场景实战】《灵犀厨房》实战(十七):【语音识别】免提声控启动播报——动口不动手
HarmonyOS 6.1 开发者盛宴|《灵犀厨房》实战(十七):【语音识别】免提声控启动播报——动口不动手
摘要:上一篇我们为菜谱详情页装上了"嘴巴"——接入 CoreSpeechKit 的 TTS 引擎实现了烹饪步骤分步语音播报。但你很快会发现:炒菜时手上全是油,根本没法点屏幕上的播放按钮。真正的免提厨房需要——进页面后直接说"开始播放",菜谱自动念起来。本篇,我们将接入 HarmonyOS 6.1.0 CoreSpeechKit 的 **SpeechRecognizer(语音识别)**模块,为《灵犀厨房》装上"耳朵"。你将学会:进页面自动开启声控、免提启动 TTS 播报、播完后自动重开声控供重听、1 分钟无指令自动关闭以省电。关键设计决策:声控不用于播报过程中的操作控制(避免 TTS 音频被麦克风回采),而是专职于免提启动播报。严格遵循 API 23 规范,代码即文档。
一、引言与系列定位
经过第 16 篇的语音合成,菜谱详情页有了播报按钮。但你很快会发现尴尬的现实:
| 场景 | 问题 | 解决 |
|---|---|---|
| 进页面后手上有油 | 没法点▶️播放按钮 | 直接说"开始播放" |
| TTS 播完一轮,想重听 | 屏幕已息屏,不想碰手机 | 声控自动重启,说"重新播放" |
| 只想重听某一步 | 想听步骤2但不想从头来 | 屏幕按钮点"下一步"跳转 |
| 声控开着但不用了 | 不想一直耗电监听 | 1 分钟无指令自动关闭 |
设计决策:为何声控不用于"下一步""暂停"等播报中途控制?
经过多次真机验证,我们发现:当 TTS 正在大声播报菜谱步骤时,手机麦克风会捕获自己的喇叭声,导致 ASR 把播报内容识别为语音指令。例如 TTS 正在说"第三步,蒸锅水开后放入蛋液碗……",ASR 识别到长文本,尝试匹配指令时可能因关键词碰撞而误触发。这是一个物理层面的回采问题,目前在模拟器调试场景中暂时无法通过纯软件可靠解决。感兴趣读者,后续可以通过采用利用 AudioKit 的音频焦点与会话隔离、分时复用 + 短暂静音、唤醒词 + 录音回采过滤、将声控能力下移到系统级语音助手等方案进行验证和解决,菜品详情页面中预留了手动和自动切换的按钮,便于读者后续可以利用这个按钮进行功能扩展、增强和改进。
因此,本项目的声控设计为:
- TTS 播报前:声控自动开启,用户说"开始播放"启动播报
- TTS 播报中:声控自动关闭,用户通过屏幕按钮控制(暂停/上下步/停止)
- TTS 播报后:声控自动重启,用户可说"重新播放"重听,1 分钟无指令自动关闭
这就是声控操作的核心价值——进页面免提启动,播完免提重听。不是指挥每一步,而是"开始"和"重来"两个关键动作。
二、核心原理与底层机制深度解读
2.1 SpeechRecognizer:系统级的"云端+本地"语音识别
HarmonyOS 6.1.0(API 23)的@kit.CoreSpeechKit提供了speechRecognizer模块,封装了华为自研的语音识别引擎。它的工作模式是"持续监听 + 静默检测自动结束":
