1# 智能语音部件 2 3## 概述 4 5### 功能简介 6 7智能语音组件包括智能语音服务框架和智能语音驱动,主要实现了语音注册及语音唤醒相关功能。 8 9**图 1** 智能语音组件架构图 10 11 12 13智能语音服务框架支持如下功能: 14系统事件监测:开机解锁、亮灭屏等系统事件监测 15并发策略:智能语音业务并发管理 16智能语音业务:语音注册、语音唤醒等智能语音业务处理 17声音触发器:DSP模型加载、DSP算法启停、DSP事件处理 18 19智能语音驱动支持如下功能: 20引擎算法:智能语音算法引擎以及事件上报 21设备驱动:DSP模型加载卸载、算法启停、事件上报以及硬件相关通路配置 22 23### 基本概念 24- 语音注册:将用户说的唤醒词转换为声学模型以及声纹特征,以便后续的语音唤醒。 25- 语音唤醒:判断当前说话人是否为已注册的特定用户。 26- DSP:数字信号处理器(Digital Signal Processors),DSP芯片即指能够实现数字信号处理技术的芯片。 27 28### 目录结构 29 30仓目录结构如下: 31 32```shell 33/foundation/ai/intelligent_voice_framework # 智能音频组件业务代码 34├── frameworks # 框架代码 35│ ├── native # 内部接口实现 36│ └── js # 外部接口实现 37├── interfaces # 接口代码 38│ ├── inner_api # 内部接口 39│ └── kits # 外部接口 40├── sa_profile # 服务配置文件 41├── services # 服务代码 42├── LICENSE # 证书文件 43├── tests # 开发者测试 44└── utils # 公共函数 45``` 46 47### 约束与限制 48 49- 智能语音服务当前只支持一个唤醒词的注册以及唤醒。 50 51## 编译构建 52 53在OpenHarmony源码根目录下,调用以下指令,单独编译intelligent_voice_framework。 54```shell 55./build.sh --product-name rk3568 --ccache --build-target intelligent_voice_framework --jobs 4 56``` 57> **说明:** 58--product-name:产品名称,例如Hi3516DV300、rk3568等。 59--ccache:编译时使用缓存功能。 60--build-target: 编译的部件名称。 61--jobs:编译的线程数,可加速编译。 62 63 64## 接口说明 65### 语音注册接口说明 66 67|接口名称|接口描述| 68|---|---| 69|createEnrollIntelligentVoiceEngine(descriptor: EnrollIntelligentVoiceEngineDescriptor): EnrollIntelligentVoiceEngine|创建注册引擎。| 70|init(config: EnrollEngineConfig): EnrollIntelligentVoiceEngineCallbackInfo|初始化注册引擎。| 71|start(isLast: boolean): EnrollIntelligentVoiceEngineCallbackInfo|启动注册。| 72|stop(): void|停止注册。| 73|commit(): EnrollIntelligentVoiceEngineCallbackInfo|确认注册结果。| 74|setWakeupHapInfo(info: WakeupHapInfo): void|设置唤醒应用信息。| 75|setSensibility(sensibility: SensibilityType): void|设置灵敏度。| 76|release(): void|释放注册引擎。| 77 78### 语音唤醒接口说明 79 80|接口名称|接口描述| 81|---|---| 82|createWakeupIntelligentVoiceEngine(descriptor: WakeupIntelligentVoiceEngineDescriptor): WakeupIntelligentVoiceEngine|创建唤醒引擎。| 83|setWakeupHapInfo(info: WakeupHapInfo): void|设置唤醒应用信息。| 84|setSensibility(sensibility: SensibilityType): void|设置灵敏度。| 85|on(type: 'wakeupIntelligentVoiceEvent', callback: Callback<WakeupIntelligentVoiceEngineCallbackInfo>): void|订阅唤醒事件。| 86|release(): void|释放唤醒引擎。| 87 88 89## 开发实例 90 91### 语音注册 92 93语音注册流程是用户通过应用的注册界面主动发起的交互流程,主要流程如下: 941. 用户启动注册(创建注册引擎并初始化注册引擎)后,进入注册界面。 952. 界面提示用户说出唤醒词,用户根据提示说出相应唤醒词(启动注册),界面会让用户再次重复说出唤醒词,直到最后一次。 963. 注册完成(确认注册结果)后,注册流程全部完成。 97示例代码如下: 98 99```js 100// 引入智能音频 101import intelligentVoice from '@ohos.ai.intelligentVoice'; 102 103// 获取智能音频管理服务 104var manager = intellVoice.getIntelligentVoiceManager(); 105if (manager == null) { 106 console.error("Get IntelligentVoiceManager failed."); 107} else { 108 console.info("Get IntelligentVoiceManager success."); 109 return; 110} 111 112// 创建注册引擎 113var engine = null; 114let engineDescriptor = { 115 wakeupPhrase: '', // 设置唤醒词 116} 117await intellVoice.createEnrollIntelligentVoiceEngine(engineDescriptor).then((data) => { 118 engine = data; 119 console.info('Create EnrollIntelligentVoice Engine finish'); 120}).catch((err) => { 121 console.error('Create EnrollIntelligentVoice Engine failed, err: ' + err.message); 122}); 123if (engine == null) { 124 console.error('Create EnrollIntelligentVoice Engine failed'); 125 return; 126} 127 128// 初始化注册引擎 129let config = { 130 language: "zh", // 中文 131 area: "CN", // 中国 132} 133engine.init(config).then((data) => { 134 console.info('Init EnrollIntelligentVoice Engine finish'); 135}).catch((err) => { 136 console.info('Init EnrollIntelligentVoice Engine failed, err: '+ err.message); 137}); 138 139// 启动注册 140let isLast = true; // true: 最后一次启动,false: 非最后一次启动,实例为true 141engine.start(isLast).then((data) => { 142 console.info('Start enrollment finish'); 143}).catch((err) => { 144 console.info('Start enrollment failed, err: '+ err.message); 145}); 146 147// 确认注册结果 148engine.commit().then((data) => { 149 console.info('Commit enroll result finish'); 150}).catch((err) => { 151 console.info('Commit enroll result failed, err: '+ err.message); 152}); 153 154// 下发语音唤醒应用信息 155let info = { 156 bundleName: "demo", // 应用的bundle name,demo只是个参考例子,具体填写由应用确定 157 abilityName: "demo", // 应用的ability name,demo只是个参考例子,具体填写由应用确定 158} 159engine.setWakeupHapInfo(info).then((data) => { 160 console.info('Set wakeup hap info finish'); 161}).catch((err) => { 162 console.info('Set wakeup hap info failed, err: '+ err.message); 163}); 164 165// 释放注册引擎 166engine.release().then((data) => { 167 console.info('Release EnrollIntelligentVoice engine success.'); 168}).catch((err) => { 169 console.info('Release EnrollIntelligentVoice engine failed, err: '+ err.message); 170}); 171``` 172 173### 语音唤醒 174 175语言唤醒由智能语音组件控制,上层应用只需要调用`createWakeupIntelligentVoiceEngine`获取唤醒引擎后注册唤醒事件回调即可。 176 177```js 178// 获取唤醒引擎 179var engine = null; 180let engineDescriptor = { 181 needApAlgEngine: true, // 是否需要框架提供ap侧算法引擎 182 wakeupPhrase: '', // 设置唤醒词 183} 184await intellVoice.createWakeupIntelligentVoiceEngine(engineDescriptor).then((data) => { 185 engine = data; 186 console.info('Create WakeupIntelligentVoice Engine finish'); 187}).catch((err) => { 188 console.error('Create WakeupIntelligentVoice Engine failed, err: ' + err.message); 189}); 190if (engine == null) { 191 console.error('Create WakeupIntelligentVoice Engine failed'); 192 return; 193} 194 195// 注册事件回调 196engine.on('wakeupIntelligentVoiceEvent',(callback) => { 197 console.info('wakeupIntelligentVoiceEvent CallBackInfo:') 198 for (let prop in callback) { 199 console.info('wakeupIntelligentVoiceEvent prop: ' + prop); 200 console.info('wakeupIntelligentVoiceEvent value: ' + callback[prop]); 201 } 202}); 203``` 204 205## 相关仓 206 207intelligent_voice_framework 208