#include "app_audio.h"
#include "helios_ringbuf.h"
#include "bk_websocket.h"
+#include "AI_AMP_2_5.h"
+#include "bk_key.h"
#define ai_VC_task_priority 35
static aos_thread_id AI_AMP_task_id = 0;
static aos_queue_ptr AI_AMP_task_queue = NULL;
static aos_queue_ptr AI_VC_record_tmp_queue = NULL;
WebSocketClient *AI_client_VC = NULL;
static u32 close_timerout = 0;
-char *AI_TTS_str = NULL;
+static char *AI_TTS_str = NULL;
static aos_timer_ptr AI_VC_1S_timer = NULL;
-typedef enum AI_AMP_MSG
-{
- VC_START,
- VC_PLAY_START,
- VC_PLAY_END,
- VC_RECORD_START,
- VC_RECORD_END,
- VC_Cancel,//打断取消
- VC_CLOSE,
- VC_CONNECT_ERROR,
-} AI_AMP_MSG_Type;
-typedef struct
-{
- char *data;
- u32 len;
- AI_AMP_MSG_Type MSG_Type;
-}AI_AMP_MSG_queue_t;
-typedef enum
-{
- VC_State_None=0,
- VC_State_Listening=1,//#听
- VC_State_SpeechStart=2,//#说开始
- VC_State_SpeechIng=3,//#正在说
- VC_State_SpeechEnd=4,//#说结束
- VC_State_RequestToRespond=5 ,//#TTS请求或者chat请求
- VC_State_Thinking=6,//#想(chat)
- VC_State_Responding=7,//#音频播放
- VC_State_TTSStart=8,
- VC_State_TTSData=9,
- VC_State_TTSFinish=10,
- VC_State_TTSEnd=11,
- VC_State_TTSError=12,
- VC_State_DialogError=13,
- VC_State_End=14,
-}VC_state_type;
-VC_state_type VC_state = VC_State_None;
-// #define APP_CFG_TASK_STK_SIZE (4096u)
-// #define APP_CFG_TASK_COM_PRIO (35u)
-// typedef int32_t (*srv_func_callback)(void *p_param, uint32_t size); // TODO: temp and common define this
-typedef struct
-{
- char *data;
- u32 len;
- u8 AIC_WEBSOCKET_OPCODE;
-}AI_VC_send_queue_t;
-typedef struct
-{
- char *data;
- u32 len;
-}AI_VC_audio_queue_t;
-static aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type);
static void AI_VC_send_satrt(void);
static aos_status AI_VC_send_data(char *data,u32 len,u8 AIC_WEBSOCKET_OPCODE);
-void AI_VC_start(void);
-void AI_VC_Close(void);
+
static void AI_VC_send_task(void *thread_input);//websocket 发送线程
static void AI_VC_read_task(void *thread_input);//websocket 读线程
static void AI_VC_put_play_data(char *data,u32 len);//音频数据入队播放
{
if(aos_recv_from_queue(AI_VC_send_queue,&AI_VC_send_queue_data,AOS_WAIT_FOREVER) == AOS_SUCCESS)
{
- // if(AI_VC_client_websocket_handle!=0 && AI_VC_send_queue_data.data)
- // {
-
- // int ret = aic_websocket_send(AI_VC_client_websocket_handle,AI_VC_send_queue_data.data,AI_VC_send_queue_data.len,AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE,
- // TRUE,AOS_WAIT_FOREVER);
- // if(AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE ==AIC_WEBSOCKET_OPCODE_TEXT_FRAME )
- // bk_printf("VCVC:send text ret=%d,len=%d,str=%s",ret,AI_VC_send_queue_data.len,AI_VC_send_queue_data.data);
- // else if(AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE ==AIC_WEBSOCKET_OPCODE_BINARY_FRAME )
- // bk_printf("VCVC:send bin ret=%d,len=%d",ret,AI_VC_send_queue_data.len);
- // aic_free(AI_VC_send_queue_data.data);
-
- // }else
- // {
- // bk_printf("AI_VC_send ERROR:AI_VC_client_websocket_handle = %d",AI_VC_client_websocket_handle);
- // }
- //bk_printf("AI_VC_send_task:send data len:%d",AI_VC_send_queue_data.len);
+
if(AI_client_VC && AI_VC_send_queue_data.data)
{
int ret = send_websocket_message(AI_client_VC,AI_VC_send_queue_data.data,AI_VC_send_queue_data.len,
}
}
}
+void AI_key_press(void)
+{
+ bk_printf("AI_key_press");
+ AI_VC_Close();
+ VC_state = VC_State_None;
+ VC_record_Start() ;
+ AI_VC_start();
+}
+void AI_key_release(void)
+{
+ bk_printf("AI_key_release");
+}
+void AI_key_long_press(void)
+{
+ bk_printf("AI_key_long_press");
+}
+
void AI_VC_start(void)
{
int ret = 0;
}
close_timerout = 0;
}
-static aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type)
+aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type)
{
AI_AMP_MSG_queue_t AI_AMP_MSG_queue_data = {0};
if(len >0)
aos_sleep(1000);
}
char *tts_str = "你好!我是巴马四季甘泉的智能助手。我可以为你解答各种各样的问题,像是有关巴马四季甘泉知识库、中基长寿科学产品、卫斯曼院士国际先进医疗中心的问题,还有日常生活与工作、旅游信息、健康咨询、教育与学习、情感交流、全球资讯、世界文化等方面的问题哦。你有没有这方面的问题想要问我呀?";
- VC_TTS_Play(tts_str);
+ VC_TTS_Play(tts_str);//开启vc播放tts
while (1) {
aos_recv_from_queue(AI_AMP_task_queue,&AI_AMP_msg,AOS_WAIT_FOREVER) ;
AI_VC_Close();
break;
-
+ case AI_KEY_PRESS:
+ AI_key_press();
+ break;
+
+ case AI_KEY_RELEASE:
+ AI_key_release();
+ break;
+ case AI_KEY_LONG_PRESS:
+ AI_key_long_press();
+ break;
default:
break;
}
sizeof(AI_AMP_MSG_queue_t),
200);
}
+ bk_key_init();
AI_AMP_task_id = aos_create_thread(
"AI_AMP_2_5",
AI_AMP_2_5_task,
4096u,
0,
NULL,
- ai_VC_task_priority,
+ ai_VC_task_priority-3,
AOS_AUTO_START);
return AIC_SUCCESS;
--- /dev/null
+#include "aic_osa.h"
+typedef enum AI_AMP_MSG
+{
+ VC_START,
+ VC_PLAY_START,
+ VC_PLAY_END,
+ VC_RECORD_START,
+ VC_RECORD_END,
+ VC_Cancel,//打断取消
+ VC_CLOSE,
+ VC_CONNECT_ERROR,
+ AI_KEY_PRESS,//AI键按下
+ AI_KEY_RELEASE,//AI键释放
+ AI_KEY_LONG_PRESS,//AI键长按
+} AI_AMP_MSG_Type;
+typedef struct
+{
+ char *data;
+ u32 len;
+ AI_AMP_MSG_Type MSG_Type;
+}AI_AMP_MSG_queue_t;
+typedef enum
+{
+ VC_State_None=0,
+ VC_State_Listening=1,//#听
+ VC_State_SpeechStart=2,//#说开始
+ VC_State_SpeechIng=3,//#正在说
+ VC_State_SpeechEnd=4,//#说结束
+ VC_State_RequestToRespond=5 ,//#TTS请求或者chat请求
+ VC_State_Thinking=6,//#想(chat)
+ VC_State_Responding=7,//#音频播放
+ VC_State_TTSStart=8,
+ VC_State_TTSData=9,
+ VC_State_TTSFinish=10,
+ VC_State_TTSEnd=11,
+ VC_State_TTSError=12,
+ VC_State_DialogError=13,
+ VC_State_End=14,
+}VC_state_type;
+VC_state_type VC_state = VC_State_None;
+// #define APP_CFG_TASK_STK_SIZE (4096u)
+// #define APP_CFG_TASK_COM_PRIO (35u)
+// typedef int32_t (*srv_func_callback)(void *p_param, uint32_t size); // TODO: temp and common define this
+typedef struct
+{
+ char *data;
+ u32 len;
+ u8 AIC_WEBSOCKET_OPCODE;
+}AI_VC_send_queue_t;
+typedef struct
+{
+ char *data;
+ u32 len;
+}AI_VC_audio_queue_t;
+
+void AI_VC_start(void);
+void AI_VC_Close(void);
+int bk_printf(const char *format, ...);
+void bk_print_hex(u8 *data,int data_len);
+aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type);
\ No newline at end of file