#include #include #include #include #include #include #include #if (CONFIG_SYS_CPU1) #include "aud_tras_drv.h" #endif #include "bk_wanson_asr.h" #include "armino_asr.h" #if (CONFIG_SYS_CPU2) #include "media_mailbox_list_util.h" #include "media_evt.h" #endif #define TAG "armino_asr" #define LOGI(...) BK_LOGI(TAG, ##__VA_ARGS__) #define LOGE(...) BK_LOGE(TAG, ##__VA_ARGS__) #define LOGW(...) BK_LOGW(TAG, ##__VA_ARGS__) #define LOGD(...) BK_LOGD(TAG, ##__VA_ARGS__) static wanson_asr_handle_t gl_wanson_asr = NULL; #if (CONFIG_SYS_CPU2) static media_mailbox_msg_t asr_to_media_major_msg = {0}; #endif int aec_output_callback(void *asr_data, void *user_data) { asr_data_t *asr_data_ptr = (asr_data_t *)asr_data; LOGD("%s, %p, %d %d \n", __func__, asr_data_ptr->data, asr_data_ptr->size,asr_data_ptr->spk_play_flag); bk_wanson_asr_set_spk_play_flag(asr_data_ptr->spk_play_flag); return bk_wanson_asr_data_write(gl_wanson_asr, (int16_t *)asr_data_ptr->data, asr_data_ptr->size); } static int wanson_asr_result_notify_handle(wanson_asr_handle_t wanson_asr, char *result, void *params) { uint32_t asr_result = 0; #if (CONFIG_WANSON_ASR_GROUP_VERSION_WORDS_V1) if (os_strcmp(result, "嗨阿米诺") == 0) //识别出唤醒词 嗨阿米诺 { LOGI("%s \n", "hi armino, cmd: 0 "); asr_result = 1; } else if (os_strcmp(result, "嘿阿米楼") == 0) { LOGI("%s \n", "hi armino, cmd: 1 "); asr_result = 1; } else if (os_strcmp(result, "嘿儿米楼") == 0) { LOGI("%s \n", "hi armino, cmd: 2 "); asr_result = 1; } else if (os_strcmp(result, "嘿鹅迷楼") == 0) { LOGI("%s \n", "hi armino, cmd: 3 "); asr_result = 1; } else if (os_strcmp(result, "拜拜阿米诺") == 0) //识别出 拜拜阿米诺 { LOGI("%s \n", "byebye armino, cmd: 0 "); asr_result = 2; } else if (os_strcmp(result, "拜拜阿米楼") == 0) { LOGI("%s \n", "byebye armino, cmd: 1 "); asr_result = 2; } else { //nothing } #else if (os_strcmp(result, "你好阿米诺") == 0) //识别出唤醒词 你好阿米诺 { LOGI("%s \n", "nihao armino, cmd: 0 "); asr_result = 1; } else if (os_strcmp(result, "再见阿米诺") == 0) { LOGI("%s \n", "zaijian armino, cmd: 1 "); asr_result = 2; } else { //nothing } #endif if (asr_result > 0) { #if (CONFIG_SYS_CPU1) aud_tras_drv_set_dialog_run_state_by_asr_result(asr_result); #endif #if (CONFIG_SYS_CPU2) asr_to_media_major_msg.event = EVENT_ASR_RESULT_NOTIFY; asr_to_media_major_msg.result = asr_result; msg_send_notify_to_media_minor_mailbox(&asr_to_media_major_msg, MAJOR_MODULE); #endif } return BK_OK; } bk_err_t armino_asr_open(void) { wanson_asr_cfg_t asr_config = DEFAULT_WANSON_ASR_CONFIG(); asr_config.asr_result_notify = wanson_asr_result_notify_handle; gl_wanson_asr = bk_wanson_asr_create(&asr_config); if (!gl_wanson_asr) { BK_LOGE(TAG, "%s, %d, create wanson asr handle fail\n", __func__, __LINE__); return BK_FAIL; } LOGI("audio wanson asr complete\n"); #if (CONFIG_SYS_CPU1) aud_tras_drv_register_aec_ouput_callback(aec_output_callback, NULL); #endif bk_wanson_asr_start(gl_wanson_asr); LOGI("wanson asr start complete\n"); return BK_OK; } bk_err_t armino_asr_close(void) { if (gl_wanson_asr) { bk_wanson_asr_destroy(gl_wanson_asr); gl_wanson_asr = NULL; } return BK_OK; }