## linux-sdk 使用说明
### 接口说明
**sdk语音相关的接口**
```
sdk 初始化函数,主要包括sdk参数初始化和授权两个过程,这个函数是阻塞的,
授权的超时时间为 15 秒。
struct dds_client *dds_client_init (const char *config_json);
参数说明:
@ config_json: 配置选项,json 格式的字符串;
返回值:
错误情况下返回NULL, 否则返回 struct dds_client 实例指针;
```
```
运行 sdk 函数,调用此函数之后就可以语音交互了。
int dds_client_start(struct dds_client *ds, ddsLintener cb,
void *user);
参数说明:
@ ds: 由 dds_client_init 返回的 struct dds_client 实例指针;
@ cb: 监听 sdk 事件的回调函数;
@ user: 用户参数;
返回值:
出错返回 -1
```
```
释放 sdk 实例的函数:
void dds_client_release(struct dds_client *ds);
参数说明:
@ ds: 由 dds_client_init 返回的 struct dds_client 实例指针;
```
**下面的接口必须在 `dds_client_init ` 和 `dds_client_start` 正确返回之后才能正确执行。**
```
向 sdk 内部发送消息:
int dds_client_publish(struct dds_client *ds, int ev,
const char *data);
参数说明:
@ ds: 由 dds_client_init 返回的 struct dds_client 实例指针;
@ ev: 发送的消息事件;
@ data: 此消息附带的数据, json 格式;
返回值:
只有当 sdk 完成初始化并且授权成功之后才能正确返回,否则返回 -1
```
```
返回 nativeAPI 查询结果的接口
int dds_client_resp_nativeapi(struct dds_client *ds,
const char *native_api, const char *native_api_data_json);
参数说明:
ds: sdk 实例指针;
native_api: 这个 nativeAPI topic 名;
native_api_data_json: 查询数据结果,json string,格式如下,
"duiWidget" 字段必须包含, 且目前取值为 "text"。 用户自定义的数据必须放在
extra 字段中。
{
"duiWidget": "text",
"extra": {
"xx": "11"
}
}
返回值: 如果 sdk 没有初始化完成或者授权成功则返回-1
```
```
内部合成的接口:
int dds_client_speak(struct dds_client *ds, const char *text);
参数说明:
ds: sdk 实例指针
text: 需要合成的文本
返回值: 如果 sdk 没有初始化完成或者授权成功则返回-1
```
```
外部 feed 音频接口:
int dds_client_feed_audio(struct dds_client *ds, char *data, int len);
参数说明:
ds: sdk 实例指针
data: 录音机数据
len: 数据长度
返回值: 出错返回 -1 ,此接口只有在 recorder 配置为外部方式才会生效。
```
```
停止当前对话,包括停止合成,取消识别等。
int dds_client_stop_dialog(struct dds_client *ds);
参数说明:
ds: sdk 实例指针
text: 需要合成的文本
返回值: 如果 sdk 没有初始化完成或者授权成功则返回-1
```
```
关闭唤醒,如果在语音对话过程中调用此接口,会在这条对话自然结束之后才会禁止唤醒。
int dds_client_disable_wakeup(struct dds_client *ds);
参数说明:
ds: sdk 实例指针
返回值: 如果 sdk 没有初始化完成或者授权成功则返回-1
```
```
打开唤醒
int dds_client_enable_wakeup(struct dds_client *ds);
参数说明:
ds: sdk 实例指针
返回值: 如果 sdk 没有初始化完成或者授权成功则返回-1
```
```
设置用户唤醒词
int dds_client_update_customword(struct dds_client *ds,
const char *word);
参数说明:
ds: sdk 实例指针
word: 唤醒词配置,格式是 json string,说明如下:
{
"greetingFile":"path:../res/tts/help.mp3", 可选
"greeting": "我在,有什么可以帮你", 可选
"pinyin": "ni hao xiao chi", 必选
"name": "你好小驰", 必选
"threshold": 0.127 必选
}
此函数成功返回后,唤醒词的相关配置会更新到 config.json 文件。
对于客户端异常断电可能导致 config.json 文件破坏的话, 需要开发者自己来避免,
比如采用备份文件的机制。
```
```
获取当前的唤醒词
char* dds_client_get_wakeupwords(struct dds_client *ds);
参数说明:
ds: sdk 实例指针
此函数返回字符串指针, 开发者需要主动释放内存。 返回字符串为json格式,如下:
{
"majorword": [{
"greetingFile": "path:../res/tts/help.mp3",
"greeting": "我在,有什么可以帮你",
"pinyin": "ni hao xiao le",
"name": "你好小乐",
"threshold": 0.144000
}],
"minorword": [{
"greetingFile": "path:../res/tts/help.mp3",
"greeting": "我在,有什么可以帮你",
"pinyin": "ni hao xiao chi",
"name": "你好小驰",
"threshold": 0.127000
}],
"cmdword": [{
"pinyin": "jiang di yin liang",
"threshold": 0.100000,
"action": "decrease.volume",
"name": "降低音量"
}],
"customword": [{
"pinyin": "ni hao tiam mao",
"name": "你好天猫",
"threshold": 0.200000
}]
}
majorword 为主唤醒词,minorword 为副唤醒词, cmdword 为命令词,
customword 为用户定义唤醒词。 其实就是 config.json 文件里面的配置。
```
```
// 获取当前的 tts 发音人,出错返回 NULL
char *dds_client_get_speaker(struct dds_client *ds);
// 获取当前的 tts 播报速度,为 float 型, 在 0 ~ 1 之间,越大表示速度越慢。
float dds_clent_get_speed(struct dds_client *ds);
// 获取当前的 tts 的播报音量大小, 为 int 型, 在 0 ~ 100 之间。
int dds_client_get_volume(struct dds_client *ds);
// 设置当前的 tts 的播报音色人,出错返回 -1
int dds_client_set_speaker(struct dds_client *ds, char *speaker);
// 设置当前的 tts 的播报速度大小,出错返回 -1
int dds_client_set_speed(struct dds_client *ds, float speed);
// 设置当前的 tts 的播报音量大小,出错返回 -1
int dds_client_set_volume(struct dds_client *ds, int vol);
```
```
声纹的相关接口
// 获取当前的声纹详细信息
char *dds_client_vprint_get_detail(struct dds_client *ds);
返回的是一个 json 格式字符串,格式为:
{
"vNum": 2,
"detail": [
{
"name":"test1"
},
{
"name":"test2"
}
]
}
// 开始进入声纹注册的接口
int dds_client_vprint_regist(struct dds_client *ds, char *name);
name 参数表示声纹注册人的姓名标识。
出错返回-1,通常是格式错误。而声纹注册过程中的详细错误将会通过回调抛出。
// 删除注册人信息
int dds_client_vprint_unregist(struct dds_client *ds, char *name);
出错返回-1,通常是格式错误。而声纹删除过程中的详细错误将会通过回调抛出。
```
```
能量接口
int dds_client_energy_estimate(struct dds_client* ds, int second);
second 参数表示接下来所要计算的音频时间长度,单位为秒。计算结果通过回调给出。
出错返回 -1
```
```
客户端信息上传的相关接口
int dds_client_upload_city(struct dds_client *dc, char *city);
city 为当前设备所在的城市名,比如苏州,上海等
出错返回 -1
```
**sdk回调消息接口**
回调函数 |
消息 |
含义 |
参数 |
ddsLintener |
local_wakeup.result |
唤醒事件 |
json string,形如
{"type":"major","greeting":"好的",
"word":"你好小驰"} |
ddsLintener |
doa.result |
doa事件 |
json string, 形如 {"dao": 100} |
ddsLintener |
sys.vad.begin |
vad开始的事件 |
无 |
ddsLintener |
sys.vad.end |
vad结束的事件 |
无 |
ddsLintener |
sys.tts.begin |
合成音开始的事件 |
无 |
ddsLintener |
sys.tts.end |
合成音结束的事件,播放结束 |
无 |
ddsLintener |
sys.asr.begin |
sdk内部开始做识别 |
无 |
ddsLintener |
asr.speech.text |
实时的语音识别结果反馈 |
json string |
ddsLintener |
asr.speech.result |
最终的语音识别结果反馈 |
json string |
ddsLintener |
dm.output |
对话的输出结果 |
json string |
ddsLintener |
sys.dm.end |
表示结束对话 |
无 |
ddsLintener |
device.mode.return |
表示设置设备状态的回复消息 |
json string "{"result":"success"}" |
ddsLintener |
sys.client.error |
表示客户端出现异常情况 |
json string "{"error":"ttsError"}" 目前 error 字段的取值一共有: ttsError, ddsNetworkError, vadSlienceTimeout |
ddsLintener |
command://xx |
在dui平台上配置的 command 指令 |
json string |
ddsLintener |
native://xx |
在dui平台上配置的 native 指令 |
json string |
ddsLintener |
vprint.regist.result |
声纹注册的消息回调 |
json string 形如, {"operation":"start"} 表示声纹注册接口调用成成功,开始注册声纹。 {"operation":"nameRepeat"} 表示注册人姓名重复, {"operation":"vNumLimit"} 表示超出声纹注册上限, {"operation":"unavailable"} 表示所注册音频信噪比不够, {"operation":"continue"} 表示可以继续注册声纹,{"operation":"success"}表示声纹注册成功 |
ddsLintener |
vprint.unregist.result |
声纹删除的消息回调 |
json string 形如 {"operation":"success"} 表示删除成功, {"operation":"noSpeaker"} 表示没有所有删除的注册人信息 |
ddsLintener |
vprint.test.result |
声纹计算的消息回调 |
json string 形如: {"register":"nothing"} 表示当前还没有声纹模型, {"score":23.286682,"word":"qi ke kong tiao","register":"test0","time":179.679932,"speech":0.880000,"RTF":0.204188} 表示收到了正常的计算结果,其中的 register 字段表示所计算的声纹标识。 如果 register 为 others表示没有匹配到具体的声纹 |
ddsLintener |
energy.estimate.result |
能量计算的消息回调 |
json string 形如, {"value":40} |
### 配置选项
```
{
"sdk": {
"configPath":"./config.json"
},
"auth": {
"productId": "278569448",
"deviceProfile": ""
},
"front": {
"aecBinPath": "",
"wakeupBinPath": "",
"beamformingBinPath": "",
"rollBack": 0
},
"vad": {
"resBinPath": "",
"pauseTime": 500,
"slienceTimeout": 5
},
"cloud": {
"productId": "278569448",
"aliasKey": "prod"
},
"recorder": {
"mode": "internal"
"samplerate":16000,
"bits":16,
"channels":1,
"device": "default"
},
"player": {
"device": "default"
},
"tts": {
"type": "cloud",
"zhilingf": {
"resBinPath":"",
"dictPath":""
},
"voice": "zhilingf",
"volume": 50,
"speed": 0.85
},
"oneShot": {
"enable": false
},
"abnormal": {
"netErrorHint":"path:../res/tts/net.mp3",
"ttsErrorHint":"path:../res/tts/tts_error.mp3"
},
"debug": {
"recAudioDumpFile":"",
"bfAudioDumpFile":""
}
}
```
参数 |
类型 |
含义 |
是否必须 |
sdk |
json 对象 |
客户端的一些配置 |
必选 |
sdk.configPath |
string |
配置文件路径 |
必选 |
auth |
json 对象 |
授权信息 |
必选 |
auth.productId |
string |
dui 上创建产品ID |
必选 |
auth.deviceProfile |
string |
授权信息 |
必选 |
front |
json 对象 |
前端信号处理的相关配置 |
必选 |
front.aecBinPath |
string |
aec 算法资源路径 |
可选 |
front.wakeupBinPath |
string |
唤醒算法资源路径 |
必选 |
front.beamformingBinPath |
string |
beamforming 算法资源路径 |
可选 |
vad |
json 对象 |
vad 算法模块配置 |
必选 |
vad.resBinPath |
string |
vad算法资源路径 |
必选 |
vad.pauseTime |
int |
vad截止检测时长,单位为 ms,默认为 500ms |
可选 |
vad.slienceTimeout |
int |
vad 的静音检测超时时长,单位为s,默认为 6s |
可选 |
cloud |
json 对象 |
云端产品的相关配置 |
必选 |
cloud.productId |
string |
dui平台上创建的产品ID |
必选 |
cloud.aliasKey |
string |
dui平台上创建的产品ID 发布支持, 取值为 "prod | test" |
可选,默认为 prod 分支 |
recorder |
json 对象 |
录音机的相关配置 |
必选 |
recorder.mode |
string |
录音方式,取值为 "internal | external" 分列表示内部录音和外部录音。 |
可选 |
recorder.samplerate |
int |
录音采样率 |
必选 |
recorder.bits |
int |
录音采样位数 |
必选 |
recorder.channels |
int |
录音采用通道数 |
必选 |
recorder.device |
string |
内部录音机的设备名,默认当前系统的 default 音频设备 |
可选 |
player |
json 对象 |
内部播放器的设置 |
可选 |
player.device |
string |
内部播放器的设备名,默认为 default |
可选 |
tts |
json 对象 |
合成音的相关配置 |
必选 |
tts.type |
string |
合成音的类型,支持 "cloud" | "local" 分别表示云端合成和本地合成 |
必选 |
tts.voice |
string |
合成音的音色,如果为本地合成, 仅支持 "zhilingf" |
必选 |
tts.zhilingf |
json 对象 |
当 tts.type 为 "local"时,会根据 tts.voice 选择对应音色的合成资源路径。 |
可选 |
tts.zhilingf.resBinPath |
string |
本地合成 zhilingf 的资源路径 |
可选 |
tts.zhilingf.dictPath |
string |
本地合成 zhilingf 的词典路径 |
可选 |
tts.volume |
int |
合成音的音量 |
可选 |
tts.speed |
int |
合成音的速度 |
可选 |
oneShot |
json 对象 |
oneshot 模块配置 |
必选 |
oneShot.enable |
bool |
是否启用oneshot,当前仅支持 false |
可选 |
abnormal |
json 对象 |
sdk异常情况下对话配置 |
可选 |
abnormal.netErrorHint |
string |
网络错误下的提示音,需要配置成本地文件,网络不好的情况下云端合成也用不了。 |
可选 |
abnormal.ttsErrorHint |
string |
云端tts合成播放错误情况下的的提示音,需要配置成本地文件。 |
可选 |
debug |
json 对象 |
保存音频的配置选项 |
可选 |
debug.recAudioDumpFile |
string |
原始录音保存文件路径 |
可选 |
debug.bfAudioDumpFile |
string |
beamforming算法输出的音频文件路径 |
可选 |
**唤醒词说明**
```
{
"greetingFile":"path:./res/tts/help.mp3",
"greeting": "我在,有什么可以帮你",
"pinyin": "ni hao xiao chi",
"name": "你好小驰",
"threshold": 0.127
}
greetingFile: 唤醒之后播放的提示音,支持本地录音文件,传入文件路径。
greeting: 唤醒之后的提示文本, sdk内部合成。
pinyin: 唤醒词拼音。
name: 唤醒词的中文。
threshold: 唤醒词阈值。
唤醒提示音播放优先级: 如果配置了 greetingFile 则播放 greetingFile ,
否则播放 greeting 。
```
**命令唤醒词说明**
```
{
"pinyin": "jiang di yin liang",
"threshold": 0.100,
"action": "decrease.volume",
"name": "降低音量"
}
pinyin: 唤醒词拼音。
name: 唤醒词的中文。
threshold: 唤醒词阈值。
action: 该命令唤醒词对应的动作,比如这个例子中,sdk回调函数会抛出
command://decrease.volume 消息。
```
**用户事件说明**
用户可以通过dds_client_publish(struct dds_client *ds, int ev, const char *data); 接口给sdk发送事件。
`DDS_CLIENT_USER_EXTERNAL_WAKEUP` 表示外部唤醒事件,用户可以在收到声纹计算结果之后通过这个事件让sdk继续交互。
这个事件传入的数据格式为:
{
"nlg":"xxxx"
}
可以通过nlg字段传入所有播报的内容,播放完成之后就可以做识别了。 如果传入NULL表示立刻开始识别。