-Iapps/BK_app \
-Iapps/BK_app/BK_drive \
-Iapps/BK_app/lib/vad \
+ -Iapps/BK_app/lib/HZ_kws \
-I$(SYS_INC_DIR) \
apps/watch/user_api/vm_api.c \
apps/watch/version.c \
apps/BK_app/bk_app.c\
+ apps/BK_app/bk_alg.c\
apps/BK_app/BK_drive/bk_audio.c\
apps/BK_app/BK_drive/mic2dac.c\
apps/BK_app/BK_drive/bk_uart.c \
+ apps/BK_app/lib/HZ_kws/voice_app.c \
cpu/br28/adc_api.c \
cpu/br28/audio_codec_clock.c \
cpu/br28/audio_common/app_audio.c \
apps/BK_app/lib/vad/libimslvad.a \
apps/BK_app/lib/vad/libimslnn.a \
apps/BK_app/lib/vad/libimslkws.a \
+ apps/BK_app/lib/HZ_kws/libmodel.a \
+ apps/BK_app/lib/HZ_kws/libasrengine.a \
--end-group \
-Tcpu/br28/sdk.ld \
-M=cpu/br28/tools/sdk.map \
}
}
- os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len);
+ int ret = os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len);
+ printf("bk_uart_send_smg event:%d ret:%d--------------------1",event,ret);
+ if(ret)
+ {
+ u8 count=20;
+ while (count--)
+ {
+ ret = os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len);
+ if(!ret){
+ printf("bk_uart_send_smg event:%d ret:%d--------------------2",event,ret);
+ break;
+ }
+ printf("bk_uart_send_smg event:%d ret:%d--------------------3",event,ret);
+ os_time_dly(1);
+ }
+ }
+ if(ret != 0 && data_tmp)
+ {
+ free(data_tmp);
+ }
+
}
void bk_uart_init()
{
void auto_switch_local_mic(void);
void clear_earphone_record(void);
int uart_send_clear_earphoneok(void);
-
+void print_hex(char *data ,int len);
#endif
--- /dev/null
+#include "bk_drive/bk_uart.h"
+#include "system/includes.h"
+#include "bk_app.h"
+#define LOG_TAG_CONST APP
+#define LOG_TAG "[BK_alg]"
+#define LOG_ERROR_ENABLE
+#define LOG_DEBUG_ENABLE
+#define LOG_INFO_ENABLE
+/* #define LOG_DUMP_ENABLE */
+#define LOG_CLI_ENABLE
+#include "debug.h"
+#include "key_event_deal.h"
+static char AI_start_flag = 0;
+
+#if(USR_KWS_ALG == KWS_BK)
+#include "imsl_vad.h"
+#include "imsl_kws.h"
+#endif
+#if(USR_KWS_ALG == KWS_HZ)
+#include "voice_config.h"
+#include "asr_score.h"
+#include "voice_app.h"
+#endif
+#include "bk_app.h"
+#include "BK_versions.h"
+#include "aec_user.h"
+#include "bk_alg.h"
+#define KWS_CBUFF_MAX_LEN (1 * 1024)
+cbuffer_t *ALG_MIC_cbuffer = NULL; // adc解码数据的发送和解码buf
+static void *ALG_MIC_buf = NULL;
+volatile unsigned int alg_count = 0;
+volatile unsigned int ALG_KWS_EVENT_count = 0;
+int ALG_input_mic_data(char *data, int len)
+{
+ //printf("ALG_input_mic_data len:%d",len);
+ volatile u32 wlen;
+ if(!ALG_MIC_cbuffer)
+ {
+ printf("ALG_input_mic_data ALG_MIC_cbuffer 未初始化");
+ return 0;
+ }
+
+ if(ALG_MIC_cbuffer)
+ {
+ int rlen = cbuf_is_write_able(ALG_MIC_cbuffer,len);
+
+ if(rlen< len)//出掉多余数据
+ {
+
+ //log_info("%s:cbuf_write fill rlen:%d!!!!!!",__FUNCTION__,rlen);
+
+ char *tmp_buf = malloc(len);
+ if(tmp_buf)
+ {
+ cbuf_read(ALG_MIC_cbuffer, tmp_buf, len);
+ free(tmp_buf);
+ }
+
+ }
+
+ wlen = cbuf_write(ALG_MIC_cbuffer, data, len);
+
+ bk_ALG_send_smg(ALG_KWS_EVENT,NULL,0);
+ }
+ // if(ALG_KWS_EVENT_count <8)//防止滞后,内存撑爆,最多也只保留2k数据,所以再多的解码事件也没用
+ // {
+ // bk_ALG_send_smg(ALG_KWS_EVENT,NULL,0);
+ // ALG_KWS_EVENT_count++;
+ // }
+ return wlen;
+}
+void alg_kws_event(void)
+{
+ int len = 512;
+ int ret = 0;
+ //ALG_KWS_EVENT_count--;
+ int rlen = KWS_CBUFF_MAX_LEN - cbuf_is_write_able(ALG_MIC_cbuffer,len);
+ //printf("alg_kws_event rlen:%d,len:%d,ALG_KWS_EVENT_count:%d",rlen,len,ALG_KWS_EVENT_count);
+ if(rlen<len)
+ {
+ //printf("alg_kws_event数据不够!!");
+ return;
+ }
+
+ char *data=zalloc(len);
+ if(data == NULL)
+ {
+ printf("alg_kws_event alloc error");
+ return ;
+ }
+ rlen = cbuf_read(ALG_MIC_cbuffer, data, len);
+ #if(USR_KWS_ALG == KWS_BK)
+ // run_vad(data, len / 2);
+ // int status = vad_detect();
+ // if (status == 1)
+ // {
+ // printf("开始说话!!!!!!!!\n");
+ // }
+ // else if(status == 2) {
+ // vad_clear();
+ // printf("说话结束!!!!!!!!\n");
+ // }
+ // #endif
+ // //printf("VAD_RUN2222\n");
+ // //os_time_dly(1);
+ //printf("北科:run_kws1 len :%d",len);
+ run_kws(data, len / 2);
+ int kws_status = kws_detect();
+ //printf("北科:run_kws2");
+ if (kws_status == 1) {
+ kws_clear();
+ printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
+ printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
+ printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
+ printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
+ printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
+ uart_send_kws();
+ }
+ #endif
+ #if(USR_KWS_ALG == KWS_HZ)
+ //printf("wanson_algorithm_recog:rlen :%d,alg_count:%d",rlen,alg_count);
+ //if(AI_start_flag == 1)
+ {
+
+ //print_hex(data,len);
+ //printf("华镇:wanson_algorithm_recog1:%d",ret);
+ ret = wanson_algorithm_recog(data,len);//len少于512会死机
+ //printf("华镇:wanson_algorithm_recog2:%d",ret);
+ if(ret ==1)
+ {
+ printf("华镇唤醒了!!!!!!!!!!!!!!");
+ printf("华镇唤醒了!!!!!!!!!!!!!!");
+ printf("华镇唤醒了!!!!!!!!!!!!!!");
+ uart_send_kws();
+ }
+ }
+ //printf("wanson_algorithm_recog2");
+ //os_time_dly(1);
+ #endif
+ free(data);
+}
+//#include "rtc.h"
+//void read_sys_time(struct sys_time *curr_time);
+//char vad_data_t[320];
+
+void bk_ALG_send_smg(bk_ALG_msg_event event,char *data,int data_len)
+{
+ char *data_tmp =NULL;
+ //log_info("%s:data_len:%d,event:%d,alg_count:%d",__FUNCTION__,data_len,event,alg_count);
+ if(alg_count>30)
+ {
+ printf("bk_ALG_send_smg:alg_count:%d算法阻塞预警!!!!!!!!!!!",alg_count);
+ }
+ if(alg_count >200)
+ {
+ printf("bk_ALG_send_smg:算法处理时间太久,请关注算法效率!!!!!!!!!!!");
+ return;
+ }
+ if(data !=NULL && data_len>0)
+ {
+ data_tmp= zalloc(data_len);
+ if(data_tmp)
+ {
+ memcpy(data_tmp,data ,data_len);
+
+ }else
+ {
+
+ log_info("%s:zalloc error",__FUNCTION__);
+ return;
+ }
+ }
+
+
+
+ int ret = os_taskq_post_msg("ALG_task", 3, event,(int)data_tmp, data_len);
+ if(ret == 0)
+ alg_count++;
+ else
+ {
+ if(data_tmp)
+ free(data_tmp);
+ }
+ //printf("bk_ALG_send_smg:alg_count:%d,ret:%d ++++++++",alg_count,ret);
+}
+
+void ALG_task(void *p)
+{
+ int res,err;
+ int msg[16];
+ log_info("%s:RUN !!!!!!\n",__FUNCTION__);
+ log_info("%s:RUN !!!!!!\n",__FUNCTION__);
+ while (1) {
+ res = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg));
+ alg_count--;
+ //printf("ALG_task:alg_count:%d--------",alg_count);
+ char *data = (int)msg[2];
+ int len = msg[3];
+ switch (msg[1]) {
+ // case ALG_INPUT_MIC_DATA_EVENT:
+ // ALG_input_mic_data(data,len);
+
+
+ // break;
+ case ALG_KWS_EVENT:
+ alg_kws_event();
+
+ break;
+ case ALG_VAD_EVENT://vad算法执行
+
+ //printf("VAD_RUN1111\n");
+ //vad
+ // 每次获得语音后调用, 语音长度最好小于100ms
+
+ break;
+
+ default:
+ break;
+ }
+ if(data)
+ {
+ free(data);
+ }
+ }
+}
+void alg_clean(void)
+{
+ #if(USR_KWS_ALG != 0)
+ cbuf_clear(ALG_MIC_cbuffer);
+ #endif
+}
+void alg_init(void)
+{
+ #if(USR_KWS_ALG != 0)
+ #if(USR_KWS_ALG == KWS_HZ)
+ wanson_kws_algorithm_init();
+
+ #endif
+ //启用VAD时初始化
+ #if(USR_KWS_ALG == KWS_BK)
+ struct VadConfig conf;
+ conf.sil_threshold = 63;
+ conf.energy_threshold = 10000;
+ conf.min_speech_length = 240;
+ conf.silence_detect_length = 300;
+ conf.rule1_min_tailing_silence = 480;
+ conf.rule2_min_tailing_silence = 960;
+ conf.rule3_min_tailing_silence = 960;
+ conf.vad_log_level = 0;
+ init_vad(&conf);
+
+ struct KwsConfig kws_conf;
+ kws_conf.min_activate_len = 10;
+ kws_conf.active_threshold = 32;
+ kws_conf.max_activate_gap = 160;
+ kws_conf.kws_log_level = 0;
+
+ int kws_status = init_kws(&kws_conf);
+
+ #endif
+ if(ALG_MIC_cbuffer ==NULL)
+ ALG_MIC_cbuffer = zalloc(sizeof(cbuffer_t));
+ if(ALG_MIC_buf == NULL)
+ ALG_MIC_buf = malloc(KWS_CBUFF_MAX_LEN);
+ if (ALG_MIC_buf != NULL) {
+ cbuf_init(ALG_MIC_cbuffer, ALG_MIC_buf, KWS_CBUFF_MAX_LEN);
+ } else {
+ printf("ALG_MIC_cbuffer err!@!!!");
+ }
+ int err = task_create(ALG_task, NULL, "ALG_task");
+
+ #endif
+}
\ No newline at end of file
--- /dev/null
+#ifndef __BK_ALG_H__
+#define __BK_ALG_H__
+#include "bk_alg.h"
+typedef enum
+{
+ ALG_INPUT_MIC_DATA_EVENT = 0,
+ ALG_VAD_EVENT ,
+ ALG_KWS_EVENT ,
+
+}bk_ALG_msg_event;
+void bk_ALG_send_smg(bk_ALG_msg_event event,char *data,int data_len);
+void alg_clean(void);
+void alg_init(void);
+#endif
\ No newline at end of file
#endif
#include "bk_app.h"
#include "BK_versions.h"
+#include "aec_user.h"
+#include "bk_alg.h"
//获取运行状态,返回0代表在休眠,返回1代表在运行
char get_ai_state(void)
{
}
return ret;
}
+#define KWS_TIMER_OUT 5//60*20 //kws多久超时进入休眠
extern u8 esco_flag;
extern u8 BT_state;
u16 AI_VC_1S_id = 0;
if(cat1_io == 0 && AI_start_flag == 1)//cat1退出唤醒,进入休眠
{
if(AI_VC_sleep_count<=0)
- AI_VC_sleep_count = 80;//60秒后休眠
+ AI_VC_sleep_count = KWS_TIMER_OUT;//60秒后休眠
//AI_start_flag = 0;
}
printf("AI_VC_start:AI_start_flag:%d",AI_start_flag);
if(AI_start_flag == 0)
{
- if(AI_VC_1S_id == 0){
+ if(AI_VC_1S_id == 0)
AI_VC_1S_id = sys_timer_add(NULL, AI_VC_1S_cb, 1000);
- }
bk_audio_open();
AI_start_flag = 1;
}
AI_VC_1S_id = 0;
}
bk_audio_close();
+ printf("AI_VC_close3:AI_start_flag:%d",AI_start_flag);
+ alg_clean();
AI_start_flag = 0;
}
}
u8 count=20;
while (count--)
{
- int ret = os_taskq_post_msg("bk_app_task", 3, event,(int)data_tmp, data_len);
+ ret = os_taskq_post_msg("bk_app_task", 3, event,(int)data_tmp, data_len);
if(!ret){
printf("event:%d ret:%d--------------------2",event,ret);
break;
os_time_dly(1);
}
}
+ if(ret != 0 && data_tmp)
+ {
+ free(data_tmp);
+ }
+
}
void bk_app_task(void *p)
{
}
}
}
-void bk_ALG_send_smg(bk_ALG_msg_event event,char *data,int data_len)
-{
- char *data_tmp =NULL;
- if(data !=NULL && data_len>0)
- {
- data_tmp= zalloc(data_len);
- if(data_tmp)
- {
- memcpy(data_tmp,data ,data_len);
-
- }else
- {
-
- log_info("%s:zalloc error",__FUNCTION__);
- return;
- }
- }
-
- os_taskq_post_msg("bk_ALG_task", 3, event,(int)data_tmp, data_len);
-}
+
//蓝牙耳机切换事件回调
void BT_State_Change_cb(void)
bk_app_send_smg(AI_OPEN,NULL,0);
bk_app_send_smg(AI_KEY_PRESS,NULL,0);
}
-//#include "rtc.h"
-//void read_sys_time(struct sys_time *curr_time);
-//char vad_data_t[320];
-void bk_ALG_task(void *p)
-{
- int res,err;
- int msg[16];
- log_info("%s:RUN !!!!!!\n",__FUNCTION__);
- log_info("%s:RUN !!!!!!\n",__FUNCTION__);
- while (1) {
- res = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg));
- char *data = (int)msg[2];
- int len = msg[3];
- switch (msg[1]) {
- case ALG_VAD_EVENT://vad算法执行
-
- //printf("VAD_RUN1111\n");
- //vad
- // 每次获得语音后调用, 语音长度最好小于100ms
- #if BK_VAD_KWS
- // run_vad(data, len / 2);
- // int status = vad_detect();
- // if (status == 1)
- // {
- // printf("开始说话!!!!!!!!\n");
- // }
- // else if(status == 2) {
- // vad_clear();
- // printf("说话结束!!!!!!!!\n");
- // }
- // #endif
- // //printf("VAD_RUN2222\n");
- // //os_time_dly(1);
- //printf("run_kws1 len :%d",len);
- run_kws(data, len / 2);
- int kws_status = kws_detect();
- //printf("run_kws2");
- if (kws_status == 1) {
- kws_clear();
- printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
- printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
- printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
- printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
- printf("kws 你好小瑞 触发了!!!!!!!!!!!!!!!!!!!!!!");
- uart_send_kws();
- }
- #endif
- #if(USR_KWS_ALG == KWS_HZ)
- //printf("wanson_algorithm_recog:len :%d",len);
- // if(wanson_algorithm_recog(data,len)==1)
- // {
- // printf("华镇唤醒了!!!!!!!!!!!!!!");
- // printf("华镇唤醒了!!!!!!!!!!!!!!");
- // printf("华镇唤醒了!!!!!!!!!!!!!!");
- // }
- #endif
- break;
-
- default:
- break;
- }
- if(data)
- {
- free(data);
- }
- }
-}
void bk_app_init(void)
{
//bk_ALG_task(NULL);
gpio_write(IO_PORTA_06,1);
// while(1)
// ;
- //启用VAD时初始化
- #if(USR_KWS_ALG == KWS_BK)
- struct VadConfig conf;
- conf.sil_threshold = 63;
- conf.energy_threshold = 10000;
- conf.min_speech_length = 240;
- conf.silence_detect_length = 300;
- conf.rule1_min_tailing_silence = 480;
- conf.rule2_min_tailing_silence = 960;
- conf.rule3_min_tailing_silence = 960;
- conf.vad_log_level = 0;
- init_vad(&conf);
-
- struct KwsConfig kws_conf;
- kws_conf.min_activate_len = 10;
- kws_conf.active_threshold = 32;
- kws_conf.max_activate_gap = 160;
- kws_conf.kws_log_level = 0;
-
- int kws_status = init_kws(&kws_conf);
-
- // struct AuthInfo auth_info;
- // strcpy(auth_info.dmp_token, "");
- // auth_kws(&auth_info);
- //err = os_task_create(bk_ALG_task, NULL, 31, 1024*8, 255, "bk_ALG_task");
-
- #endif
- #if(USR_KWS_ALG == KWS_HZ)
- wanson_kws_algorithm_init();
- #endif
- #if(USR_KWS_ALG != 0)
- err = task_create(bk_ALG_task, NULL, "bk_ALG_task");
- #endif
+
err = os_task_create(bk_app_task, NULL, 3, 512, 512, "bk_app_task");
//int err = task_create(bk_app_task, NULL, "bk_app_task");
if (err != OS_ERR_NONE) {
r_printf("creat fail %x\n", err);
}
//AI_VC_1S_id = sys_timer_add(NULL, AI_VC_1S_cb, 1000);
+ alg_init();//算法初始化
-
}
static u8 BK_AI_APP_idle_query()
#define KWS_NO 0
#define KWS_HZ 1 //华镇算法
#define KWS_BK 2 //北科算法
-#define USR_KWS_ALG KWS_NO
+#define USR_KWS_ALG KWS_BK
+
+
typedef enum
{
AI_KEY_PRESS = 0,
BT_DISCONNEECT_EVENT,
}bk_app_msg_event;
-typedef enum
-{
- ALG_VAD_EVENT = 0,
-}bk_ALG_msg_event;
void bk_app_send_smg(bk_app_msg_event event,char *data,int data_len);
-void bk_ALG_send_smg(bk_ALG_msg_event event,char *data,int data_len);
+
void bk_app_init(void);
int bk_key_switch(int key_event,int key_value);
char get_ai_state(void);
{-2400, "小艾退下"},
{-2400, "小艾再见"},
{-2400, "小爱同学"},
- {-2400, "打开助手"},
- {-2400, "你好助手"},
- {-2400, "增大音量"},
- {-2400, "减小音量"},
- {-2400, "上一首"},
- {-2400, "下一首"},
- {-2400, "播放音乐"},
- {-2400, "继续播放"},
- {-2400, "暂停播放"},
- {-2400, "停止播放"},
- {-2400, "切换到英文"},
- {-2400, "升级模式"},
- {-2400, "再见"},
- {-2400, "不聊了"},
- {-2400, "站起来"},
- {-2400, "站立"},
- {-2400, "坐下"},
- {-2400, "趴下"},
- {-2400, "转个圈"},
- {-2400, "打个滚"},
- {-2400, "去尿尿"},
- {-2400, "尿尿去"},
- {-2400, "去睡觉"},
- {-2400, "睡觉去"},
- {-2400, "装死"},
- {-2400, "秀一个"},
- {-2400, "跳个舞"},
- {-2400, "跳舞"},
- {-2400, "来个绝活"},
- {-2400, "倒立旋转"},
- {-2400, "前进"},
- {-2400, "后退"},
- {-2400, "左转"},
- {-2400, "向左转"},
- {-2400, "右转"},
- {-2400, "向右转"},
- {-2400, "过来"},
- {-2400, "走开"},
- {-2400, "滚开"},
- {-2400, "滚蛋"},
- {-2400, "匍匐前进"},
- {-2400, "滑步"},
- {-2400, "我讨厌你"},
- {-2400, "打开灯光"},
- {-2400, "关闭灯光"},
- {-2400, "调亮灯光"},
- {-2400, "调暗灯光"},
- {-2400, "七彩模式"},
- {-2400, "音乐模式"},
- {-2400, "白色灯光"},
- {-2400, "黄色灯光"},
- {-2400, "自然灯光"},
- {-2400, "红色灯光"},
- {-2400, "绿色灯光"},
- {-2400, "蓝色灯光"},
- {-2400, "橙色灯光"},
- {-2400, "青色灯光"},
- {-2400, "紫色灯光"},
- {-2400, "开始配网"},
- {-2400, "停止配网"},
- {-2400, "开开"},
- {-2400, "关关"},
- {-2400, "定时"},
- {-2400, "取消"},
- {-2400, "打开关闭"},
- {-2400, "关闭打开"},
- {-2400, "打开火焰"},
- {-2400, "关闭火焰"},
- {-2400, "打开电视"},
- {-2400, "关闭电视"},
- {-2400, "打开空调"},
- {-2400, "关闭空调"},
+ {-20000, "打开助手"},
+ // {-2400, "你好助手"},
+ // {-2400, "增大音量"},
+ // {-2400, "减小音量"},
+ // {-2400, "上一首"},
+ // {-2400, "下一首"},
+ // {-2400, "播放音乐"},
+ // {-2400, "继续播放"},
+ // {-2400, "暂停播放"},
+ // {-2400, "停止播放"},
+ // {-2400, "切换到英文"},
+ // {-2400, "升级模式"},
+ // {-2400, "再见"},
+ // {-2400, "不聊了"},
+ // {-2400, "站起来"},
+ // {-2400, "站立"},
+ // {-2400, "坐下"},
+ // {-2400, "趴下"},
+ // {-2400, "转个圈"},
+ // {-2400, "打个滚"},
+ // {-2400, "去尿尿"},
+ // {-2400, "尿尿去"},
+ // {-2400, "去睡觉"},
+ // {-2400, "睡觉去"},
+ // {-2400, "装死"},
+ // {-2400, "秀一个"},
+ // {-2400, "跳个舞"},
+ // {-2400, "跳舞"},
+ // {-2400, "来个绝活"},
+ // {-2400, "倒立旋转"},
+ // {-2400, "前进"},
+ // {-2400, "后退"},
+ // {-2400, "左转"},
+ // {-2400, "向左转"},
+ // {-2400, "右转"},
+ // {-2400, "向右转"},
+ // {-2400, "过来"},
+ // {-2400, "走开"},
+ // {-2400, "滚开"},
+ // {-2400, "滚蛋"},
+ // {-2400, "匍匐前进"},
+ // {-2400, "滑步"},
+ // {-2400, "我讨厌你"},
+ // {-2400, "打开灯光"},
+ // {-2400, "关闭灯光"},
+ // {-2400, "调亮灯光"},
+ // {-2400, "调暗灯光"},
+ // {-2400, "七彩模式"},
+ // {-2400, "音乐模式"},
+ // {-2400, "白色灯光"},
+ // {-2400, "黄色灯光"},
+ // {-2400, "自然灯光"},
+ // {-2400, "红色灯光"},
+ // {-2400, "绿色灯光"},
+ // {-2400, "蓝色灯光"},
+ // {-2400, "橙色灯光"},
+ // {-2400, "青色灯光"},
+ // {-2400, "紫色灯光"},
+ // {-2400, "开始配网"},
+ // {-2400, "停止配网"},
+ // {-2400, "开开"},
+ // {-2400, "关关"},
+ // {-2400, "定时"},
+ // {-2400, "取消"},
+ // {-2400, "打开关闭"},
+ // {-2400, "关闭打开"},
+ // {-2400, "打开火焰"},
+ // {-2400, "关闭火焰"},
+ // {-2400, "打开电视"},
+ // {-2400, "关闭电视"},
+ // {-2400, "打开空调"},
+ // {-2400, "关闭空调"},
};
}
wanson_score_display_set(1);
+ //wanson_audio_buf_init(4*1024);
return 0;
}
int wanson_algorithm_recog(void* data, int len)
{
- const char* text;
+ char* text;
float score;
int rs = 0;
- if (tone_get_status()) { // 正在播放提示音
- if (get_call_status() != BT_CALL_INCOMING) {
- return -1;
- }
- }
+ // if (tone_get_status()) { // 正在播放提示音
+ // if (get_call_status() != BT_CALL_INCOMING) {
+ // return -1;
+ // }
+ // }
rs = Wanson_ASR_Recog(data, len, &text, &score); //识别计算函数,有识别结果rs返回1
if (rs == 1) {
printf("ASR Result: %s\n", text);
/*
* Build Information
- * Git Commit: 219b944f738c298dc3de319a1750ee3ba39f90c3
+ * Git Commit: efc478e25cfbe524a8f65773b143ada42c67ec8a
* Branch: master
- * Build Date: 2025-08-07 16:18:55
+ * Build Date: 2025-09-05 14:58:39
*/
#ifndef _IMSL_KWS_DLL
/*
* Build Information
- * Git Commit: 219b944f738c298dc3de319a1750ee3ba39f90c3
+ * Git Commit: efc478e25cfbe524a8f65773b143ada42c67ec8a
* Branch: master
- * Build Date: 2025-08-07 16:18:56
+ * Build Date: 2025-09-05 14:58:40
*/
#ifndef _IMSL_VAD_DLL
void app_main()
{
- gpio_set_pull_up(IO_PORTG_07, 0);
- gpio_set_pull_down(IO_PORTG_07, 0);
- gpio_set_direction(IO_PORTG_07, 0);
- gpio_set_die(IO_PORTG_07, 1);
- gpio_write(IO_PORTG_07,1);
#if TCFG_PSRAM_UI_EFFECT
static struct effect_sca_alpha sal = {0};
#endif
}
#endif
-#if TCFG_SMART_VOICE_ENABLE
- int audio_smart_voice_detect_init(struct vad_mic_platform_data *mic_data);
- audio_smart_voice_detect_init((struct vad_mic_platform_data *)&vad_mic_data);
-#endif /* #if TCFG_SMART_VOICE_ENABLE */
-
-
#ifdef AUDIO_PCM_DEBUG
extern void uartSendInit();
uartSendInit();
gpio_set_pull_up(IO_PORTB_01, 0); //展锐样机开机PB1上拉,影响功耗,此处修改为不上拉
#endif
}
-
+void usr_smart_voice_init()
+{
+#if TCFG_SMART_VOICE_ENABLE
+ int audio_smart_voice_detect_init(struct vad_mic_platform_data *mic_data);
+ audio_smart_voice_detect_init((struct vad_mic_platform_data *)&vad_mic_data);
+#endif /* #if TCFG_SMART_VOICE_ENABLE */
+}
/*进软关机之前默认将IO口都设置成高阻状态,需要保留原来状态的请修改该函数*/
extern void dac_power_off(void);
void board_set_soft_poweroff(void)
cur_por_flag = 0xA5;
}
#else /* #if defined(CONFIG_CPU_BR23) */
- // u32 reset_src = get_reset_source_value();
- // if (update || (reset_src & BIT(MSYS_POWER_RETURN)) || (reset_src & BIT(P33_PPINR_RST))) {
- // //log_info("reset_flag:0x%x",reset_src);
- // cur_por_flag = 0xA5;
- // }
- u32 reset_src = is_reset_source(BIT(MSYS_POWER_RETURN) | BIT(P33_PPINR_RST));
- if (update || reset_src) {
+ u32 reset_src = get_reset_source_value();
+ if (update || (reset_src & BIT(MSYS_POWER_RETURN)) || (reset_src & BIT(P33_PPINR_RST))) {
+ //log_info("reset_flag:0x%x",reset_src);
cur_por_flag = 0xA5;
}
#endif /* #if defined(CONFIG_CPU_BR23) */
if (!status) {
return 0;
}
-#endif
+#endif
msg[0] = (int)kws_poweroff;
msg[1] = 1;
msg[2] = (int)NULL;
#if TCFG_AUDIO_ASR_DEVELOP == ASR_CFG_IFLYTEK
{"audio_vad", 3, 0, 768, 128 },
#else
- {"audio_vad", 3, 0, 512, 128 },
+ {"audio_vad", 3, 0, 1024, 512 },
#endif
#endif
#if PRODUCT_TEST_ENABLE
#else
{"cat1_update", 1, 0, 256, 128 },
#endif
-
#endif
// {"user_mic_record", 3, 0, 256 ,128 },
// {"user_mic_record_play", 2, 0, 512,256 },
// {"user_ble_protocol", 3, 0, 1024, 256 },
//{"bk_app_task", 3, 0, 1024*2, 256 },
- {"bk_ALG_task", 3, 1, 1024, 256 },
- {"bk_uart_task", 3, 0, 2*1024, 256 },
+ {"ALG_task", 3, 0, 1*1024, 512 },
+ {"bk_uart_task", 3, 0, 1*1024, 256 },
{0, 0},
};
///异常中断,asser打印开启
#ifdef CONFIG_RELEASE_ENABLE
-const int config_asser = 0;
+const int config_asser = 1;
#else
const int config_asser = 1;
#endif
}
+#if TCFG_SMART_VOICE_ENABLE
+ extern void usr_smart_voice_init();
+ usr_smart_voice_init();
+#endif /* #if TCFG_SMART_VOICE_ENABLE */
while (1) {
app_task_get_msg(msg, ARRAY_SIZE(msg), 1);
switch (msg[0]) {
*/
/*----------------------------------------------------------------------------*/
-extern int write_iis_mic_data(char *data, int len);
+
extern int read_iis_play_data(char *data, int len);
static int esco_dec_data_handler(struct audio_stream_entry *entry,
struct audio_data_frame *in,
- //wlen = write_iis_mic_data((char*)out_frame.data,out_frame.data_len);
+
//printf("111out_frame:len:%d,wlen:%d,process_len:%d,read_err:%d\n",out_frame.data_len,wlen,decoder->process_len,decoder->read_err);
audio_link_demo_post_mic(tmp_buf,out_frame.data_len); //传进来的是单通道数据
else
{
- printf("没解码完,不入队!!!!!");
+ //printf("没解码完,不入队!!!!!");
}
free(tmp_buf);
*****/
#ifndef TCFG_UNISOUND_ENABLE
-#define TCFG_UNISOUND_ENABLE 0
+#define TCFG_UNISOUND_ENABLE 1
#endif
//// 如果clock_fix 为0 就按照配置设置时钟,如果有值就固定频率
#if (TCFG_MIC_EFFECT_ENABLE|| TCFG_UNISOUND_ENABLE)
#define CLOCK_FIX (192)
#else
-#define CLOCK_FIX 0
+#define CLOCK_FIX 192
#endif
#if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR) && TCFG_EQ_DIVIDE_ENABLE
extern void exception_irq_handler(void);
int __crc16_mutex_init();
-extern int crc16_mutex_init();
+extern int __crc16_mutex_init();
extern const int CONFIG_CPU_CORE_NUM;
/* sys_timer_add(NULL, timer, 3 * 1000); */
/* usr_timer_add(NULL, timer, 5 * 1000, 0); */
- crc16_mutex_init();
+ __crc16_mutex_init();
}
/*-----------------------------------------------------------*/
}
sv->kws_model = model;
+ printf("audio_kws_open:%d",model);
sv->kws = audio_kws_open(model, NULL);//kws_model_files[model]);
#endif
}
#define ASR_CORE_WAKEUP 0
#define ASR_CORE_STANDBY 1
+#define WANSON_ASR_ENABLE 0
+
/*
*********************************************************************
* audio smart voice detect open
#if ((TCFG_SMART_VOICE_ENABLE) && (TCFG_AUDIO_ASR_DEVELOP == ASR_CFG_USER_DEFINED))
-#define ASR_FRAME_SAMPLES 160 /*语音识别帧长(采样点)*/
+#define ASR_FRAME_SAMPLES 256 /*语音识别帧长(采样点)*/
+extern int wanson_algorithm_recog(void* data, int len);
+extern int wanson_kws_algorithm_init();
+extern void wanson_kws_algorithm_deinit();
+extern int wanson_app_proc();
+extern void wasnon_app_asr_init();
struct user_platform_asr_context {
void *mic;
extern const int config_user_asr_enable;
static struct user_platform_asr_context *__this = NULL;
+unsigned char kws_result[256] = { 0 };
/*
* 算法引擎打开函数
*/
static void *user_asr_core_open(int sample_rate)
{
+#if !WANSON_ASR_ENABLE
return NULL;
+#endif
+ if (wanson_kws_algorithm_init() < 0) {
+ return NULL;
+ } else {
+ return (void*)kws_result;
+ }
}
/*
*/
static void user_asr_core_close(void *core)
{
-
+#if WANSON_ASR_ENABLE
+ wanson_kws_algorithm_deinit();
+#endif
}
/*
*/
static int user_asr_core_data_handler(void *core, void *data, int len)
{
- return 0;
+#if WANSON_ASR_ENABLE
+ wanson_algorithm_recog(data, len);
+#endif
}
/*
* Note(s) : 该函数通过读取mic数据送入算法引擎完成语音帧.
*********************************************************************
*/
-static int user_asr_data_handler(struct user_platform_asr_context *asr)
+static int user_asr_data_handler(struct user_platform_asr_context* asr)
{
int result = 0;
if (!asr->mic) {
return -EINVAL;
}
- printf("user_asr_data_handler\n");
- s16 data[ASR_FRAME_SAMPLES];
- int len = voice_mic_data_read(asr->mic, data, sizeof(data));
- if (len < sizeof(data)) {
- return -EINVAL;
- }
+ s16 data[ASR_FRAME_SAMPLES];
- if (asr->core) {
- result = user_asr_core_data_handler(asr->core, data, sizeof(data));
+#if WANSON_ASR_ENABLE
+ wanson_app_proc();
+#endif
+
+ while (voice_mic_data_read(asr->mic, data, sizeof(data))) {
+ if (asr->core) {
+ putchar('A');
+ result = user_asr_core_data_handler(asr->core, data, sizeof(data));
+ }
}
-
- return 0;
+ return 0;
}
/*
user_asr_core_close(asr->core);
asr->core = NULL;
asr->data_enable = 0;
- os_sem_post((OS_SEM *)msg[1]);
+ os_sem_post((OS_SEM *)msg[1]);
break;
case SMART_VOICE_MSG_DMA: /*MIC通路数据DMA消息*/
err = ASR_CORE_WAKEUP;
@REM ..\..\packres.exe -keep-suffix-case F_ASCII.PIX F_GB2312.PIX F_GB2312.TAB ascii.res -n res -o font\r
@REM ..\..\packres.exe -keep-suffix-case update_new.ufw -n res -o update_new\r
::echo %1\r
-\r
-set CHIPKEY=default.key\r
-\r
+::汇杰芯\r
+set CHIPKEY=-key default.key\r
+::华镇\r
+::set CHIPKEY= -key1 503_KEY03_AC69XX_8c59.key1 -mkey KEY03.mkey \r
:: 8MBytes\r
::..\..\packres.exe -keep-suffix-case F_ASCII.PIX ascii.res -n res -o font\r
::..\..\fat_comm.exe -pad-backup2 -force-align-fat -out new_res.bin -image-size 8 -filelist JL sidebar watch3 watch4 font -remove-empty -remove-bpb -mark-bad-after 0x7e0000 -key %CHIPKEY% -address 0\r
::..\..\packres.exe -n res -o res.bin new_res.bin 0 nor_up.ufw 0xb00000 -normal\r
\r
\r
-..\..\isd_download.exe -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot uboot.boot -app app.bin cfg_tool.bin -res ui_upgrade p11_code.bin config.dat tone.cfg eq_cfg_hw.bin -flash-params flash_params.bin -uboot_compress -key %CHIPKEY% -ex_api_bin user_api.bin \r
+..\..\isd_download.exe -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot uboot.boot -app app.bin cfg_tool.bin -res ui_upgrade p11_code.bin config.dat tone.cfg eq_cfg_hw.bin -flash-params flash_params.bin -uboot_compress %CHIPKEY% -ex_api_bin user_api.bin \r
::..\..\isd_download.exe -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot uboot.boot -app app.bin cfg_tool.bin -res p11_code.bin config.dat -uboot_compress -key %CHIPKEY% -ex_flash res.bin -ex_api_bin user_api.bin \r
::-format all\r
::-ex_flash res.bin\r