282 lines
9.7 KiB
C
282 lines
9.7 KiB
C
|
||
/**
|
||
* @file tvs_common_def.h
|
||
* @brief TVS SDK结构体和参数、返回值、错误码等定义
|
||
* @date 2019-5-10
|
||
*/
|
||
|
||
#ifndef __TVS_COMMON_DEF_H__
|
||
#define __TVS_COMMON_DEF_H__
|
||
|
||
#include "generic/typedef.h"
|
||
|
||
//---------------------------------------------------------------------------
|
||
// 错误码
|
||
//---------------------------------------------------------------------------
|
||
/**
|
||
* @brief 成功
|
||
*/
|
||
#define TVS_API_ERROR_NONE 0
|
||
/**
|
||
* @brief 一般错误
|
||
*/
|
||
#define TVS_API_ERROR_OTHERS -1
|
||
/**
|
||
* @brief 当前正处于智能语音对话或者播放控制中,无法启动
|
||
*/
|
||
#define TVS_API_ERROR_BUSY -2
|
||
/**
|
||
* @brief 当前播放器正忙,无法启动
|
||
*/
|
||
#define TVS_API_ERROR_MEDIAPLAYER_INVALID -3
|
||
/**
|
||
* @brief 当前终端未鉴权
|
||
*/
|
||
#define TVS_API_ERROR_NOT_ATHORIZED -4
|
||
/**
|
||
* @brief 当前终端网络连接异常
|
||
*/
|
||
#define TVS_API_ERROR_NETWORK_INVALID -5
|
||
/**
|
||
* @brief 由于终端无client id,导致授权失败
|
||
*/
|
||
#define TVS_API_ERROR_CLIENT_ID_INVALID -6
|
||
|
||
/**
|
||
* @brief 由于终端SDK处于STOP状态
|
||
*/
|
||
#define TVS_API_ERROR_NOT_RUNNING -7
|
||
|
||
/**
|
||
* @brief 由于网络异常导致后台无响应
|
||
*/
|
||
#define TVS_API_ERROR_NETWORK_ERROR -8
|
||
|
||
/**
|
||
* @brief 执行播控切换后,后台未下发媒体,一般是因为歌单播放完毕导致
|
||
*/
|
||
#define TVS_API_ERROR_NO_MORE_MEDIA -10
|
||
|
||
#define TVS_API_ERROR_INVALID_PARAMS -11
|
||
|
||
|
||
/**
|
||
* @brief SDK状态
|
||
*/
|
||
typedef enum {
|
||
TVS_STATE_IDLE, /*!< 空闲状态 */
|
||
TVS_STATE_PREPARING, /*!< 准备状态 */
|
||
TVS_STATE_RECOGNIZNG, /*!< "语音识别中"状态 */
|
||
TVS_STATE_BUSY, /*!< 忙状态 */
|
||
TVS_STATE_SPEECH_PLAYING, /*!< TTS播报状态 */
|
||
} tvs_recognize_state;
|
||
|
||
#define TVS_STATE_COMPLETE TVS_STATE_IDLE
|
||
|
||
/**
|
||
* @brief SDK环境
|
||
*/
|
||
typedef enum {
|
||
TVS_API_ENV_TEST, /*!< 测试环境 */
|
||
TVS_API_ENV_NORMAL, /*!< 正式环境 */
|
||
TVS_API_ENV_EXP, /*!< 体验环境 */
|
||
TVS_API_ENV_DEV, /*!< 开发环境 */
|
||
} tvs_api_env;
|
||
|
||
/**
|
||
* @brief 人设/模式
|
||
*/
|
||
typedef enum {
|
||
TVS_MODE_NORMAL, /*!< 普通模式 */
|
||
TVS_MODE_BAOLA, /*!< 宝拉模式 */
|
||
TVS_MODE_CHILD, /*!< 儿童模式 */
|
||
TVS_MODE_COUNT,
|
||
} tvs_mode;
|
||
|
||
/**
|
||
* @brief SDK配置参数
|
||
*/
|
||
typedef struct {
|
||
tvs_api_env def_env; /*!< SDK默认环境 */
|
||
bool def_sandbox_open; /*!< SDK默认是否开启沙箱,true代表默认开启 */
|
||
int recorder_bitrate; /*!< 录音参数,取值为8000/16000, 默认为8000 */
|
||
int recorder_channels; /*!< 录音参数,声道数, 默认为1 */
|
||
int reserve[10];
|
||
} tvs_default_config;
|
||
|
||
/**
|
||
* @brief 产品QUA
|
||
*/
|
||
typedef struct {
|
||
char *version; /*!< 终端版本号,必须为4段,每一段为一个数字,各个数字之间用"."分开,例如:1.0.1.1000;
|
||
新的版本号必须比旧版本号大,例如
|
||
2.0.1.101 > 2.0.1.100 > 1.0.1.1011 > 1.0.1.1000 */
|
||
char *package_name; /*!< 终端软件包名,用于区分不同产品,格式一般为com.companyname.product */
|
||
char *reserve; /*!< 扩展字段,一般填NULL,仅用于有特殊需求时候,对QUA字段进行扩展,例如:&VIN=1001&DE=SPEAKER */
|
||
} tvs_product_qua;
|
||
|
||
/**
|
||
* @brief AUDIO_PROVIDER返回码
|
||
*/
|
||
typedef enum {
|
||
TVS_API_AUDIO_PROVIDER_ERROR_NONE = 0, /*!< 正常结束 */
|
||
TVS_API_AUDIO_PROVIDER_ERROR_OTHERS = -1, /*!< 其他原因 */
|
||
TVS_API_AUDIO_PROVIDER_ERROR_STOP_CAPTURE = -2, /*!< 收到云端VAD的结束标识 */
|
||
TVS_API_AUDIO_PROVIDER_ERROR_TIME_OUT = -3, /*!< 流式语音上传超时,一般是请求超时或者服务器未及时响应 */
|
||
TVS_API_AUDIO_PROVIDER_ERROR_NETWORK = -10, /*!< 流式语音上传失败,由于网络原因导致 */
|
||
} tvs_api_audio_provider_error;
|
||
|
||
/**
|
||
* @brief 设备端启动智能语音的方式,包括按下说话/抬起停止模式、单击按钮录音模式以及唤醒词唤醒模式
|
||
*/
|
||
typedef enum {
|
||
TVS_RECOGNIZER_PRESS_AND_HOLD, /*!< push to talk 模式 */
|
||
TVS_RECOGNIZER_TAP, /*!< 点击按钮录音模式 */
|
||
TVS_RECOGNIZER_WAKEWORD, /*!< 唤醒词模式 */
|
||
TVS_RECOGNIZER_TYPE_MAX,
|
||
} tvs_api_recognizer_type;
|
||
|
||
/**
|
||
* @brief 设备端当前正在执行的指令类型
|
||
*/
|
||
typedef enum {
|
||
TVS_CONTROL_SPEECH = 100, /*!< 语音对话 */
|
||
TVS_CONTROL_PLAY_NEXT, /*!< 播控切换,下一首 */
|
||
TVS_CONTROL_PLAY_PREV, /*!< 播控切换,上一首 */
|
||
TVS_CONTROL_PLAY_FINISH, /*!< 通知后台,播放完毕 */
|
||
TVS_CONTROL_SEMANTIC, /*!< 发送明确语义 */
|
||
} tvs_api_control_type;
|
||
|
||
/**
|
||
* @brief 设备端状态变化时的参数
|
||
*/
|
||
typedef struct {
|
||
tvs_api_control_type control_type; /*!< 当前执行的指令类型,见enum tvs_api_control_type */
|
||
int error; /*!< 错误码,值见TVS_API_ERROR_ */
|
||
int reserve[5]; /*!< 预留*/
|
||
} tvs_api_state_param;
|
||
|
||
|
||
#define TVS_TIMBRE_ZHOULONGFEI "ZHOULONGFEI"
|
||
#define TVS_TIMBRE_CHENANQI "CHENANQI"
|
||
#define TVS_TIMBRE_YEZI "YEZI"
|
||
#define TVS_TIMBRE_YEWAN "YEWAN"
|
||
#define TVS_TIMBRE_DAJI "DAJI"
|
||
#define TVS_TIMBRE_LIBAI "LIBAI"
|
||
#define TVS_TIMBRE_NAZHA "NAZHA"
|
||
#define TVS_TIMBRE_MUZHA "MUZHA"
|
||
#define TVS_TIMBRE_WY "WY"
|
||
|
||
/**
|
||
* @brief 语音合成参数
|
||
*/
|
||
typedef struct {
|
||
char *tts_text; /*!< 语音合成的内容 */
|
||
char *timbre; /*!< 音色(取值见TVS_TIMBRE_*, 如果设置为NULL,后台进行语音合成时,将采用默认音色) */
|
||
int volume; /*!< 音量(取值0~100, 如果设置为-1,后台进行语音合成时,将采用默认值100) */
|
||
int speed; /*!< 语速(取值0~100, 如果设置为-1,后台进行语音合成时,将采用默认值50) */
|
||
int pitch; /*!< 声调(取值0~100, 如果设置为-1,后台进行语音合成时,将采用默认值50) */
|
||
} tvs_api_tts_param;
|
||
|
||
/**
|
||
* @brief 监听SDK状态变化
|
||
*
|
||
* @param last_state 上一个状态。
|
||
* @param new_state 下一个状态。
|
||
* @param state_param 状态变化参数,见tvs_api_state_param的定义,需要进行一次转换:
|
||
* tvs_api_state_param* param = (tvs_api_state_param*)state_param
|
||
*
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_callback_on_state_changed)(tvs_recognize_state last_state, tvs_recognize_state new_state, void *state_param);
|
||
|
||
/**
|
||
* @brief 监听多端互动推送信息,一般是来自手机APP端的自定义消息。
|
||
* 实现此接口,可以接受这些自定义消息的推送,并跟进消息内容进行处理。
|
||
*
|
||
* @param text 推送信息,一般是转义后的Json字符串,要与消息推送方约定格式。
|
||
* @param token 消息的唯一标识。
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_callback_on_terminal_sync)(const char *text, const char *token);
|
||
|
||
/**
|
||
* @brief 监听模式切换,用户使用语音或者从手机APP端切换模式后,设备端会收到模式切换指令。
|
||
* 实现此接口,可以在模式切换的时候得到通知
|
||
*
|
||
* @param src 当前模式。
|
||
* @param dst 切换的目标模式。
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_callback_on_mode_changed)(tvs_mode src, tvs_mode dst);
|
||
|
||
/**
|
||
* @brief 监听多轮会话事件,用户使用语音触发多轮会话的场景,设备端会收到多轮会话指令。
|
||
* 实现此接口,可以在触发多轮对话的时候得到通知,需要触发一轮新的智能语音对话流程。
|
||
*
|
||
* @param 无
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_callback_on_expect_speech)();
|
||
|
||
/**
|
||
* @brief 监听后台下发的自定义技能数据
|
||
*
|
||
* @param json_payload 自定义技能数据,为一个Json字符串
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_callback_on_recv_tvs_control)(const char *json_payload);
|
||
|
||
/**
|
||
* @brief 监听后台下发的语音转文本结果
|
||
*
|
||
* @param asr_text 语音转文本结果
|
||
* @param is_end 取值true代表asr_text为语音识别最终结果,false代表asr_text为语音识别的中间结果
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_callback_on_asr_result)(const char *asr_text, bool is_end);
|
||
|
||
/**
|
||
* @brief 监听后台下发的厂商账号解绑消息
|
||
*
|
||
* @param unbind_time 解绑的时间
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_callback_on_unbind)(long long unbind_time);
|
||
|
||
|
||
/**
|
||
* @brief 向SDK注册的回调函数
|
||
*/
|
||
typedef struct {
|
||
tvs_callback_on_state_changed on_state_changed; /*!< 监听SDK状态变化 */
|
||
tvs_callback_on_terminal_sync on_terminal_sync; /*!< 监听多端互动推送信息 */
|
||
tvs_callback_on_mode_changed on_mode_changed; /*!< 监听模式切换 */
|
||
tvs_callback_on_expect_speech on_expect_speech; /*!< 多轮会话 */
|
||
tvs_callback_on_recv_tvs_control on_recv_tvs_control; /*!< 自定义技能 */
|
||
tvs_callback_on_unbind on_unbind; /*!< 解绑消息 */
|
||
int reserve[10];
|
||
} tvs_api_callback;
|
||
|
||
/**
|
||
* @brief 监听authorize的结果,需要持久化此结果,作为下一次authorize的依据
|
||
*
|
||
* @param ok 为true代表操作成功,为false代表操作失败。
|
||
* @param auth_info authorize结果。
|
||
* @param auth_info_len authorize结果的长度。
|
||
* @param error 失败原因
|
||
* @return 无
|
||
*/
|
||
typedef void (*tvs_authorize_callback)(bool ok, char *auth_info, int auth_info_len, const char *client_id, int error);
|
||
|
||
/**
|
||
* @brief 当SDK内部的流式语音上传操作停止时,将回调此接口
|
||
*
|
||
* @param session_id 会话ID
|
||
* @param error 停止原因,见tvs_api_audio_provider_error枚举
|
||
* @return 0代表成功,其他值代表失败
|
||
*/
|
||
typedef void (*tvs_api_callback_on_provider_reader_stop)(int session_id, int error);
|
||
|
||
#endif
|