1# 智能语音部件
2
3## 概述
4
5### 功能简介
6
7智能语音组件包括智能语音服务框架和智能语音驱动,主要实现了语音注册及语音唤醒相关功能。
8
9**图 1**  智能语音组件架构图
10
11![image.png](figures/zh-intelligent-voice-framework.png)
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