Windows SDK 开发手册
1、概述
SDK作为思必驰离线语音技术,集成了一整套成熟的单点语音技术,旨在使第三方应用可以快捷便利地集成和使用思必驰的离线语音技术。在使用单项基础技术接口之前,先授权(离线功能概述)
2、语音唤醒
语音唤醒(wakeup),又称关键词检测(keyword spooting),一般输入经过信号处理后的单通道音频数据。
2.1 duilite_wakeup_new
struct duilite_wakeup *duilite_wakeup_new(char *cfg, duilite_callback callback, void *userdata);
接口能力
初始化wakeup引擎。
输入参数
cfg – 初始化配置,JSON字符串,格式如下:
{ "resBinPath": "res_file_path" } |
其中,resBinPath为资源文件,必选。
callback – 通用回调函数,唤醒时返回唤醒结果json字符串,格式见附录1-1。
userdata – 用户指针,透传,不需要可设为NULL;
返回值
成功 – 引擎指针;
失败 – NULL;
2.2 duilite_wakeup_register
int duilite_wakeup_register(struct duilite_wakeup *wakeup, int callback_type, duilite_callback callback, void *userdata);
接口能力
设置通用回调函数。需要注意的是,此处设置一些辅助性的函数,非初始化接口设置的唤醒通用回调函数。
输入参数
wakeup – 引擎指针;
callback_type – 通用回调函数类型,如下表:
通用回调函数类型 |
备注 |
DUILITE_CALLBACK_WAKEUP_VPRINTCUT |
声纹回调,输出的数据送往声纹引擎,输出的数据有音频数据和一些json字符串,开发者负责将输出数据透传至声纹引擎。 |
callback – 通用回调函数,内部串行调用,与外部调用线程属于同一线程;
userdata – 用户指针,透传,不需要可设为NULL;
返回值
成功 – 0;
失败 – 非0;
2.3 duilite_wakeup_start
int duilite_wakeup_start(struct duilite_wakeup *wakeup, char *param);
接口能力
启动wakeup引擎。
输入参数
wakeup – 引擎指针;
param – 启动参数,JSON字符串,格式如下:
{ "env": "words=ni hao xiao le;thresh=0.2;", "throwWaitWakeup": 0 } |
其中env配置示例见附录1-1,必选;throwWaitWakeup表示是否开启待唤醒状态,1表示是,0或者未设置该字段表示否,可选,默认为0。
返回值
成功 – 0;
失败 – 非0;
2.4 duilite_wakeup_feed
int duilite_wakeup_feed(struct duilite_wakeup *wakeup, char *data, int len);
接口能力
输入音频数据,并计算;若唤醒,通过调用通用回调函数返回结果。
输入参数
wakeup – 引擎指针;
data – 音频数据;
len – 音频数据长度;
返回值
成功 – 0;
失败 – 非0;
2.5 duilite_wakeup_stop
int duilite_wakeup_stop(struct duilite_wakeup *wakeup);
接口能力
停止wakeup引擎,并将缓冲区的音频数据处理完毕;一般在收到语音唤醒信号后不需要引擎继续工作时调用;注意,不能在通用回调函数中调用该接口。
输入参数
wakeup – 引擎指针;
返回值
成功 – 0;
失败 – 非0;
2.6 duilite_wakeup_cancel
int duilite_wakeup_cancel(struct duilite_wakeup *wakeup);
接口能力
取消当前唤醒工作,并重置引擎。
输入参数
wakeup – 引擎指针;
返回值
成功 – 0;
失败 – 非0;
2.7 duilite_wakeup_set
int duilite_wakeup_set(struct duilite_wakeup *wakeup, char *param);
接口能力
配置wakeup引擎。
输入参数
wakeup – 引擎指针;
param – 配置参数,JSON字符串,可选,不需要可设为NULL,格式如下:
{ "env": "words=ni hao xiao le;thresh=0.4;" } |
其中env配置示例见附录1-1,可选,用于动态更新唤醒词的阈值(目前只支持更新thresh)。
返回值
成功 – 0;
失败 – 非0;
2.8 duilite_wakeup_delete
int duilite_wakeup_delete(struct duilite_wakeup *wakeup);
接口能力
销毁wakeup引擎。
输入参数
wakeup – 引擎指针;
返回值
成功 – 0;
失败 – 非0;
附录1
1. 语音唤醒引擎启动参数及结果示例
- 启动参数
启动参数示例:
{"env": "words=ni hao xiao le;thresh=0.2;dcheck=1;vad=1;"} |
当需要支持短词唤醒时,各参数配置实例如下:
"env":"words=xiao kang xiao kang,xiao kang;thresh=0.85,0.8;subword_wakeup=0,1;" |
字段 |
释义 |
示例 |
words |
唤醒词,拼音形式,词之间逗号分隔,字之间空格分隔,必选。 |
words=ni hao xiao le,ni hao xiao chi; |
thresh |
唤醒词的阈值,具体取值请咨询技术对接人员,必选。 |
thresh=0.2,0.4; |
dcheck |
唤醒后唤醒词解码功能,1表示打开,0表示关闭,默认关闭,可选 |
dcheck=1,0; |
major |
设置主唤醒词,1为是,0位否,默认为否,可选 |
major=1,0; |
vad |
唤醒中vad的开关,1表示打开,0表示关闭,默认为1,可选。 |
vad=1; |
subword_wakeup |
唤醒中的短唤醒词开关,1表示打开,0表示关闭,可选。通常只给主唤醒词配半字唤醒。 |
subword_wakeup=1 |
当有多个唤醒词时,各参数需要一一对应,如:
{"env": "words=ni hao xiao le,ni hao xiao chi;thresh=0.2,0.4;" } |
- 结果说明
status为1:
{ "version": "res_file_path", "lib_version": "1.5.6", "vad_version": "version", "status": 1, "wakeupWord": "ni hao xiao le", "major": 0, "boundary": 0, "confidence": 0.390171, "frame": 58, "wakeup_frame": 51, "abs_feed_frame": 57, "words": { "ni hao xiao le": 0.2000, "ni hao xiao chi": 1.5000 } } |
status为2:
{ "version": "res_file_path", "lib_version": "1.6.8", "vad_version": "version", "status": 2, "wakeupWord": "ni hao xiao chi", "major": 1, "confidence": 0.506597, "pre_start_offset": 45760, "start_offset": 45760, "end_offset": 11200, "speech_len": 34560, "abs_feed_bytes": 309440, "delay": 157.766113, "speed": "normal", "words": { "ni hao xiao chi": 0.4000 } } |
status为7:
{ "version": " res_file_path ", "lib_version": "1.6.16", "vad_version": "version", "status": 7, "wakeupWord": "xiao kang", "confidence": 0.848336, "abs_feed_frame": 21846, "words": { "xiao kang xiao kang": 0.8000, "xiao kang": 0.8000 } } |
各字段释义如下表:
成员 |
释义 |
|
version |
资源文件版本 |
|
lib_version |
算法版本 |
|
vad_version |
若在唤醒中使用了vad,则表示资源版本,可选 |
|
status |
唤醒状态,详见图表3.5.3 |
|
wakeupWord |
唤醒词 |
|
major |
是否为主唤醒词 |
|
confidence |
唤醒置信度 |
|
status:1 |
boundary |
边界信息开关 |
frame |
唤醒帧号 |
|
wakeup_frame |
通过vad后的唤醒帧号 |
|
abs_feed_frame |
唤醒已处理的绝对帧序号 |
|
status:2 |
pre_start_offset |
一般同start_offset |
start_offset |
唤醒词起始点相对于已输入音频的偏移量 |
|
end_offset |
唤醒点相对于已输入音频的偏移量 |
|
speech_len |
实际唤醒音频长度 |
|
abs_feed_bytes |
唤醒已处理的字节数 |
|
abs_recv_bytes |
唤醒已接收字节数 |
|
delay |
略 |
|
speed |
语速,取值有normal、fast、slow |
|
words |
通过env配置的唤醒词列表 |
- 唤醒状态码
语音唤醒引擎,唤醒回调中的唤醒状态如下:
状态值 |
释义 |
-1 |
唤醒出现异常 |
0 |
等待唤醒 |
1 |
已唤醒,一般收到该状态,表明唤醒成功,若是多麦信号处理配合声纹使用则无该状态。 |
2 |
唤醒边界,输出边界信息 |
3 |
唤醒重启 |
4 |
预唤醒,达到低阈值,准备进入唤醒状态,常用来保存音频 |
5 |
唤醒音频信息,配合声纹使用,该信息后立马返回唤醒音频 |
6 |
唤醒音频 |
7 |
半字唤醒,只抛信息,不重启 |
2. 常见错误码
错误码 |
数值 |
释义 |
SpeechNoError |
0 |
成功,无错误 |
SpeechAuthError |
-9999 |
授权错误 |
SpeechReadFileError |
-9998 |
读文件失败 |
SpeechWriteFileError |
-9997 |
写文件失败 |
SpeechRemoveFileError |
-9996 |
删除文件失败 |
SpeechStatFileError |
-9995 |
获取文件信息失败 |
SpeechNotDir |
-9994 |
目录不存在 |
SpeechOpenDirError |
-9993 |
打开目录失败 |
SpeechMakeDirError |
-9992 |
创建目录失败 |
SpeechDirPathInvaild |
-9991 |
目录路径非法 |
SpeechWsaInitError |
-9990 |
Wsa初始化失败 |
SpeechInputNull |
-9899 |
输入为空 |
SpeechNotJson |
-9898 |
非Json格式 |
SpeechNoField |
-9897 |
配置字段缺失 |
SpeechNoFile |
-9896 |
文件缺失 |
SpeechNoMem |
-9895 |
内存申请失败 |
SpeechNoInstance |
-9894 |
引擎指针为空 |
SpeechCoreError |
-9893 |
内核错误 |
SpeechCoreNotSupport |
-9892 |
内核不支持该功能 |
SpeechExceedLimit |
-9891 |
超过相应限制 |
SpeechSpeexChannelError |
-9799 |
Speex通道错误 |
SpeechSpeexRateError |
-9798 |
Speex比特率错误 |
SpeechSpeexOggInitError |
-9797 |
Ogg初始化错误 |
SpeechSpeexStateError |
-9796 |
Speex引擎错误 |
SpeechNWakeupIndexError |
-9699 |
多路唤醒通道索引错误 |
SpeechUploadInitError |
-9599 |
数据上传模块初始化失败 |