物联网平台提供千里传音组件,该组件基于C Link SDK 4.x实现了一种高级能力,助您快速集成并使用千里传音服务。
功能说明
SDK中组件实现功能如下:
自动下载物联网平台下发的语料。
批量删除语料。
同步或异步组合播报。
获取SDK
获取设备端C Link SDK,解压出文件夹./LinkSDK。
下载千里传音组件,解压出文件夹./link-speech。
SDK中涉及的组件接口如下表,详情请参见./link-speech/aiot_linkspeech_api.h。
接口
说明
aiot_linkspeech_init()
初始化千里传音组件。
aiot_linkspeech_setopt()
配置千里传音组件参数。
aiot_linkspeech_start()
启动千里传音服务。
aiot_linkspeech_stop()
退出千里传音服务。
aiot_linkspeech_deinit()
反初始化(删除)千里传音组件。
移植说明
完成Link SDK移植:linux/posix/freertos官方已完成移植。
使用说明
功能原理
应用程序通过调用C Link SDK的接口,基于MQTT的协议,与物联网平台建立的连接。
如下功能时序图,以设备的应用程序(./link-speech/demos/link_speech_basic_demo.c)为例,介绍应用程序实现千里传音功能的流程。
步骤一:初始化千里传音组件
/* 组件初始化 */
void *linkspeech_handle = aiot_linkspeech_init();
步骤二:配置组件参数
配置连接参数,关联MQTT连接。
千里传音服务依赖设备与物联网平台的MQTT连接,使用该功能前需要先完成MQTT建连。
设备端C Link SDK建连,请参见MQTT接入。
将千里传音服务与MQTT连接关联。
/* 关联MQTT */ aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_MQTT_HANDLE, mqtt_handle);
配置音频文件目录。
通过work_dir定义文件目录,语料下载及组合播报时,需使用该目录。
/* 设置音频文件保存目录 */ aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_WORK_DIR, (void *)work_dir);
(可选)设置文件下载协议。
语料下载支持HTTP和HTTPS协议,通过https_enable定义,默认为HTTP。
HTTP消费更小,HTTPS更安全,您可根据实际环境设置下载协议。
/* 设置文件下载协议,0:HTTP;1:HTTPS*/ aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_HTTPS_ENABLE, (void *)&https_enable);
设置文件系统操作接口。
组件支持跨平台移植,开发者移植SDK需要实现该接口并设置给组件。
文件系统接口定义
/** * @brief 用以向SDK描述其运行硬件平台的资源如何使用的方法结构体 */ typedef struct { /** * @brief 查询文件大小 * * @return int32_t * @retval -1 文件不存在 * @retval >=0 实际文件大小 */ int32_t (*file_size)(char *path); /** * @brief 删除文件 * * @return int32_t * @retval 0 文件删除成功 * @retval -1 文件修改失败 */ int32_t (*file_delete)(char *path); /** * @brief 写文件数据 * * @details 如果文件不存在,则创建新文件 * @return int32_t * @retval 成功,返回写入的文件长度 * @retval 失败,返回-1 */ int32_t (*file_write)(char *path, uint32_t offset, uint8_t *data, uint32_t len); /** * @brief 写文件数据 * * @details open操作需用户执行 * @return int32_t * @retval 成功,返回读取到的文件长度 * @retval 失败,返回-1 */ int32_t (*file_read)(char *path, uint32_t offset, uint8_t *data, uint32_t len); } aiot_fs_t;
设置文件系统接口
/* 设置文件系统操作接口 */ aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_FILE_OPS, (void *)&posix_fs);
设置音频播放接口实现给组件。
音频播放接口定义
typedef struct { /* 当音频播报结束后执行该回调, 需要带userdata */ void (*on_finish)(char *filename, void *userdata); void *userdata; } play_param_t; /* 设置音频播放回调,该接口不能长时间阻塞 */ typedef int32_t (*player_cb_t)(char *filename, play_param_t *ext_params);
设置音频播放接口
/* 设置音频播放接口,音频播放回调内不能长时间阻塞 */ aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_PLAYER_CALLBACK, (void *)player);
步骤三:启动千里传音服务
/* 启动千里传音服务,该接口会长时间阻塞 */
aiot_linkspeech_start(linkspeech_handle);
(可选)步骤四:退出千里传音服务
/* 启动千里传音服务,该接口会长时间阻塞 */
aiot_linkspeech_stop(linkspeech_handle);
(可选)步骤五:删除千里传音服务
aiot_linkspeech_deinit(&linkspeech_handle);