云端识别服务(ASR ONLINE)¶
1. 概述¶
CI110X系列芯片SDK中集成各类云端在线识别服务,在网络连接的情况下可以进行云+端识别。
2. 使用说明¶
2.1. 通过串口收发数据方式¶
通过串口与WIFI模块通信,包括语音数据上传、播放数据下载、主要交互命令等。
2.2. 代码结构¶
源文件 | 说明 |
---|---|
ci_uart_protocol.c ci_uart_protocol.h |
串口数据收发处理 |
voice_upload_manage.c voice_upload_manage.h |
语音数据上传管理 |
flash_update.c flash_update.h |
OTA升级 |
task_uart_send_data.c task_uart_send_data.h |
串口数据发送 |
LinkMsgProc.c LinkMsgProc.h |
数据打包解码 |
目前支持功能:
- 单轮模式,全双工模式
- 播放控制流程
- 可设置本地VAD
- 多轮对话
- 云端本地音量控制
- 启动配网功能
- OTA升级功能
2.2.1. 单轮模式,全双工模式¶
CI110X系列芯片SDK中支持单次唤醒上传一次语音数据,响应一次的单轮模式,和单次唤醒上传多次数据,响应多次的全双工模式。
- 单轮模式:当前SDK默认是单轮模式,唤醒后调用 upload_wakeup_voice_data() 开始上传语音数据,当检测到VAD EDN或者超时时自动结束语音上传,等待识别响应。接口具体使用参考SDK代码。
/**
* @brief 开始上传语音,可处理唤醒词语音
* @param addr 语音数据地址
* @param frames 语音帧数量
* @param upload_wakeup 是否上传唤醒词
* @return int RETURN_OK 成功, RETURN_ERR 失败
*/
int upload_wakeup_voice_data(unsigned int addr,int frames,bool upload_wakeup)
- 全双工模式:如需设置为全双工模式需要调用 enter_full_duplex_mode(),进入全双工模式后在60S内设备检测到VAD START后开始上传语音,VAD EDN结束上传,云端反馈识别结果后响应结果。
/**
* @brief 进入全双工模式
*/
void enter_full_duplex_mode(void)
{
full_duplex_mode_flag = true;
// local_vad_close();//检测到有效语音才上传
save_voice_data_start();
set_state_enter_wakeup(60*1000);//可设置
}
2.2.2. 播放控制流程¶
目前能够支持ADPCM、MP3、M4A、WAV音频格式,详细接口可参考 ☞《音频播放器(AUDIO-PLAYER)》文档。当前SDK支持MP3的TTS播报音,MP3、M4A、WAV格式的音乐资源播放,音乐打断后等TTS响应完毕可自行恢复播放。目前不能自动区分音频资源格式,需要云端下发资源时标记音频格式。
2.2.3. 可设置本地VAD¶
SDK默认是开启本地VAD 检测,检测到VAD END后会结束语音上传。
VAD 设置接口如下:
/**
* @brief 本地VAD END 时结束语音
*/
void local_vad_open(void)
{
use_local_vad = true;
}
/**
* @brief 语音上传与VAD无关
*/
void local_vad_close(void)
{
use_local_vad = false;
}
2.2.4. 多轮对话¶
进入多轮对话需要由云端控制进入,所以需要云端支持发起多轮多话。
接口调用如下:
/**
* @brief 进入多轮对话
* @param timeout_ms 超时时间
*/
void enter_next_dialogue(uint32_t timeout_ms)
{
send_cmd_to_mtk(CI_WAKEUP_STATE,NO_WAKEUP_FILL_DATA);
set_send_voice_type(NO_VOICE_DATA);
set_need_response_flag(false);
set_local_player_status(0);
set_upload_timeout(timeout_ms);/*updata timer*/
set_wakeup_when_playing_flag( check_current_playing() );
set_wake_up_cmd_status(1);
save_voice_data_start();
clear_dialogue_num();
clear_cloud_response_num();
}
2.2.5. 云端本地音量控制¶
SDK支持本地和云端共同控制音量,需要保持本地音量与云端音量同步,目前是按照百分比同步。
音量设置接口如下:
/**
* @brief 设置音量,同步到云端
* @param vol 音量值
*/
void vol_set(int32_t vol)
{
/*set codec or PA vol*/
if((vol <= SPK_VOL_10) && (vol >= SPK_VOL_2))
{
audio_play_set_vol_gain(vol*SPK_VOL_MAX/100);
ci_logdebug(LOG_MEDIA,"sys real volume = %d\n",vol*SPK_VOL_MAX/100);
VolSetNWrite(vol);
send_cmd_to_mtk(SEND_LOCAL_VOLUME_CMD,volume_set_hl);
}
else
{
ci_logdebug(LOG_MEDIA,"volume error = %d\n",vol);
}
}
2.2.6. 启动配网功能¶
可以通过本地命令进入配网模式,本地识别到配网命令时,向WIFI模块发送 SEND_ENTER_SMARTCONFIG_CMD 命令,进入配网模式。
配网相关命令如下:
SEND_ENTER_SMARTCONFIG_CMD = 0x0863, //进入配网模式
SEND_EXIT_SMARTCONFIG_CMD = 0x0864, //退出配网模式
INIT_SMARTCONFIG_CMD = 0x0865, // 初始密码状态 出厂配置状态
2.2.7. OTA升级功能¶
本地开启版本检测,进入升级流程需要向WIFI模块发送 START_OTA 命令,WIFI会获取服务器最新固件版本,检测是否需要更新本地固件,如果需要更新会进入升级流程。
START_OTA = 0x0882, //进入OTA