
摘要
在智能设备无处不在的今天,"语音"成为最自然、最便捷的人机交互方式之一。尤其在多设备协同的鸿蒙系统中,语音驱动不仅能解放双手,更能推动智能场景的自动切换和无感控制 。本文将结合鸿蒙的语音能力,介绍如何实现从唤醒识别 到语义理解再到场景切换的一整套流程,并配有可运行的 Demo 代码与真实应用场景讲解。
引言
HarmonyOS NEXT 为开发者提供了完整的语音处理框架,从底层的唤醒服务、语音识别(ASR)、语义理解(NLU)到语音合成(TTS),这些能力通过 Core Speech Kit 暴露给开发者。借助这些能力,我们可以在智能家居、车载系统、可穿戴设备等场景中,实现基于语音的"动口不动手"的交互体验。
搭建语音驱动场景切换框架
启用关键词唤醒功能
要实现语音驱动的第一步,用户必须通过唤醒词激活语音交互,比如说出"你好,小鸿"。
ts
import voice from '@ohos.voiceEngine';
let wakeupInstance = voice.getWakeupEngine();
wakeupInstance.init((err) => {
if (err) {
console.error('Wakeup init failed: ', err);
return;
}
// 设置自定义唤醒词
wakeupInstance.setWakeupWord('你好,小鸿');
wakeupInstance.startWakeup();
});
说明:
setWakeupWord()
:可以自定义设置为任意关键词。startWakeup()
:启动监听,在唤醒词被识别后会进入语音指令监听状态。
实现语音识别(ASR)并对接语义理解(NLU)
唤醒后开始语音识别,然后将识别结果传入语义解析模块。
ts
import speech from '@ohos.speechRecognizer';
let recognizer = speech.getSpeechRecognizer();
recognizer.start({
language: 'zh-CN',
onResult: (result) => {
console.log('识别结果:', result.text);
processCommand(result.text); // 调用命令处理器
},
onError: (err) => {
console.error('识别错误:', err);
}
});
解析语音指令并切换场景
你可以根据识别到的文本内容匹配场景关键词,如"打开学习模式"、"切换到睡眠模式"等。
ts
function processCommand(command: string) {
if (command.includes('学习模式')) {
switchToScene('study');
} else if (command.includes('睡眠模式')) {
switchToScene('sleep');
} else if (command.includes('休闲模式')) {
switchToScene('relax');
} else {
speakText('暂不支持该模式,请重试');
}
}
function switchToScene(scene: string) {
speakText(`正在切换到${scene}模式`);
// 模拟场景切换逻辑,比如改变灯光、声音、UI
if (scene === 'study') {
console.log('切换到学习模式:亮灯、静音、开启阅读App');
} else if (scene === 'sleep') {
console.log('切换到睡眠模式:关闭灯光、播放助眠音乐');
} else if (scene === 'relax') {
console.log('切换到休闲模式:打开背景音乐、调暗灯光');
}
}
语音播报反馈(TTS)
在场景切换完成后,使用语音合成模块播报用户反馈。
ts
import tts from '@ohos.tts';
let ttsClient = tts.getTTSClient();
function speakText(text: string) {
ttsClient.speak({
text: text,
speed: 1.0,
pitch: 1.0,
volume: 1.0
}, (err) => {
if (err) {
console.error('TTS 播报失败', err);
}
});
}
典型应用场景举例
场景一:智能家居语音切换控制
用户说出"你好,小鸿,切换到睡眠模式",系统将自动执行一系列动作:
ts
// 睡眠场景示例:关闭灯光,拉窗帘,播放白噪音
function switchToScene(scene: string) {
if (scene === 'sleep') {
deviceManager.turnOffLight();
deviceManager.closeCurtain();
musicPlayer.play('white_noise.mp3');
speakText('睡眠模式已开启,晚安');
}
}
场景二:车载语音助手场景切换
司机说出"你好,小鸿,导航到公司并开启安静模式":
ts
if (command.includes('导航')) {
mapApp.startNavigation('公司地址');
}
if (command.includes('安静模式')) {
carSystem.setVolume(1);
carSystem.turnOffNotifications();
speakText('已为您切换到安静模式');
}
场景三:穿戴设备语音运动模式切换
用户佩戴手表说"开始跑步模式":
ts
if (command.includes('跑步')) {
fitnessTracker.startTracking('running');
speakText('跑步模式已启动,加油!');
}
QA 环节
Q1:如何避免误唤醒?
可以通过 wakeWordThreshold
参数设置唤醒词灵敏度,同时结合多次确认机制,如"请再次确认是否进入该模式"。
Q2:语音识别对网络依赖大吗?
Core Speech Kit 支持离线语音识别模型,可以在无网络时执行常用命令。但复杂意图推荐在线处理。
Q3:能否实现多轮语音交互?
可以。结合 NLU 和上下文管理模块实现对话状态维护,如先问"你想进入哪个模式?",再等待用户回答。
总结
通过鸿蒙系统提供的语音相关 API,我们可以快速构建一个"唤醒-识别-理解-反馈-执行"闭环语音控制系统。无论是家庭、车载还是穿戴设备场景,基于语音的自然交互方式能大幅提升用户体验。未来,结合鸿蒙分布式能力和设备协同,语音驱动的多场景切换将成为主流交互方式之一。
如果你也在开发 HarmonyOS NEXT 应用,不妨试试用语音激活你的下一个场景切换!