鸿蒙开发实录:Core Speech Kit在美颜相机中的语音交互实现
开发场景需求
在“拍摄美颜相机”应用中,Core Speech Kit 提供语音识别与合成能力,实现以下功能:
语音控制拍摄:通过口令(如“拍照”“开始美颜”)触发操作。
语音播报状态:完成拍摄后播报“照片已保存”。
无障碍支持:为视障用户提供语音引导。
// 核心实现与代码示例
// 语音控制拍照
// 初始化语音识别:
typescript
import speech from '@ohos.multimedia.speech';
// 初始化语音识别引擎
const recognizer = speech.createRecognizer({
mode: speech.RecognizerMode.FREE_FORM, // 自由格式识别
language: 'zh-CN' // 中文普通话
});
// 注册关键词监听
recognizer.on('result', (text: string) => {
if (text.includes('拍照')) {
Camera.takePhoto();
} else if (text.includes('切换滤镜')) {
this.nextFilter();
}
});
// 开始监听(需用户授权)
try {
await recognizer.start();
} catch (err) {
console.error(语音识别失败: ${err.code});
}
// 权限声明(module.json5):
json
"requestPermissions": [
{ "name": "ohos.permission.MICROPHONE" },
{ "name": "ohos.permission.SPEECH_RECOGNITION" }
]
// 语音状态反馈
// 使用TTS播报结果:
typescript
const ttsEngine = speech.createTtsEngine({
volume: 0.8, // 音量80%
speed: 1.2 // 语速1.2倍
});
// 照片保存后播报
function onPhotoSaved() {
ttsEngine.speak('照片已保存,您要分享吗?', {
queueMode: speech.TtsQueueMode.CLEAR // 打断当前播报
});
}
// 支持多语言播报:
typescript
// 根据系统语言切换语音
const systemLang = I18n.getSystemLanguage();
ttsEngine.setLanguage(systemLang === 'zh' ? 'zh-CN' : 'en-US');
// 无障碍语音引导
// 描述UI元素:
typescript
Button('美颜强度调节')
.accessibilityDescription('双击可调整美颜强度,当前值50%')
.onClick(() => {
// 操作完成后语音反馈
ttsEngine.speak('已调整到70%');
});
// 监听系统无障碍事件:
typescript
accessibility.on('accessibilityStateChange', (enabled) => {
if (enabled) {
// 启用详细语音引导
this.voiceGuidanceMode = true;
}
});
// 关键优化策略
// 离线语音支持
typescript
// 加载本地语音模型
recognizer.loadModel(speech.ModelType.WAKEUP, '/data/wakeup.model')
.then(() => {
recognizer.setWakeupWord(['嘿相机']); // 自定义唤醒词
});
// 降噪处理
typescript
// 启用AI降噪(需设备支持)
recognizer.setParams({
noiseSuppression: speech.NoiseSuppression.AI,
voiceDetection: true // 只响应人声
});
// 低功耗模式
typescript
// 设备电量低于20%时降低识别精度
power.on('batteryLow', () => {
recognizer.setMode(speech.RecognizerMode.KEYWORD_SPOT); // 仅关键词唤醒
});
// 权限动态申请
typescript
// 检查并请求麦克风权限
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
const atManager = abilityAccessCtrl.createAtManager();
try {
await atManager.requestPermissionsFromUser(
['ohos.permission.MICROPHONE']
);
} catch (err) {
prompt.showToast({ message: '请开启麦克风权限' });
}
// 唤醒词冲突处理
typescript
// 检测是否与其他应用唤醒词冲突
recognizer.checkWakeupConflict(['嘿相机'])
.then((conflict) => {
if (conflict) {
this.setWakeupWord(['拍照啦']); // 替换冲突词
}
});
// 资源释放
typescript
aboutToDisappear() {
recognizer.destroy(); // 防止内存泄漏
ttsEngine.off();
}

浙公网安备 33010602011771号