From d24c8e186ac3763b49755d01fbb39b54cfbd4a64 Mon Sep 17 00:00:00 2001 From: chenjintao Date: Mon, 21 Sep 2026 10:48:15 +0800 Subject: [PATCH] feat: add local random timeout prompts --- .../threadx/interface/custom_app/audio.c | 2 +- .../interface/custom_app/http_downfile.c | 20 +++++-- .../interface/custom_app/inc/audio_prompt.h | 19 +++++++ .../interface/custom_app/ws_talkingq.c | 56 +++++++++++++++++-- 4 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 ql-application/threadx/interface/custom_app/inc/audio_prompt.h diff --git a/ql-application/threadx/interface/custom_app/audio.c b/ql-application/threadx/interface/custom_app/audio.c index 05177a1..f7a3f57 100644 --- a/ql-application/threadx/interface/custom_app/audio.c +++ b/ql-application/threadx/interface/custom_app/audio.c @@ -5,6 +5,7 @@ #include "ql_iic.h" #include "ql_gpio.h" #include "app_inc.h" +#include "audio_prompt.h" #include "ql_fs.h" #define DEFAULT_VOLUME 6 @@ -14,7 +15,6 @@ u8 g_cur_volume = 0; u8 g_pre_volume = 0; -extern const char *mp3_file[]; extern int g_file_valid; diff --git a/ql-application/threadx/interface/custom_app/http_downfile.c b/ql-application/threadx/interface/custom_app/http_downfile.c index 2be48a8..21c5975 100644 --- a/ql-application/threadx/interface/custom_app/http_downfile.c +++ b/ql-application/threadx/interface/custom_app/http_downfile.c @@ -14,7 +14,9 @@ #include "sockets.h" #include "layer3.h" #include "ql_uart.h" -const char *mp3_file[] ={ +#include "audio_prompt.h" + +const char *mp3_file[AUDIO_PROMPT_FILE_COUNT] ={ "test.mp3",// 0 "network_connect_zh.mp3",//1 系统启动中,正在等待网络连接 "network_check.mp3",//2 网络不好 请检查网络 @@ -31,9 +33,16 @@ const char *mp3_file[] ={ "device_wake_up_zh.mp3",//13 设备已唤醒 "low_power_zh.mp3",//14 电量低 "low_power_off_zh.mp3",//15 电量严重不足,马上关机 - "volume_up_zh.mp3",//16 - "volume_down_zh.mp3",//17 + "volume_up_zh.mp3",//16 + "volume_down_zh.mp3",//17 "ai_active_zh.mp3",//18 + /* 19~24:对话响应超时随机提示音,文件名与资源服务器保持一致 */ + "tts_error01.mp3",//19 + "tts_error02.mp3",//20 + "tts_error03.mp3",//21 + "tts_error04.mp3",//22 + "tts_error05.mp3",//23 + "tts_error06.mp3",//24 }; //http://banban.api.talkingq.com:8080/assets/roles/banban/tts_error.mp3 @@ -183,7 +192,8 @@ void app_file_check_download(void) char filename_buff[64]={0x00}; int ret = 0, cnt = 0; - for(index=1;index<19;index++){ + /* 遍历完整资源表,新增提示音不存在时会在联网后自动补下载 */ + for(index=1;index= AUDIO_PROMPT_FILE_COUNT){ + printf("invalid prompt index:%d\n", index); + return -3; + } + printf("xiaoice_play_index:%d\n", index); //正在录音过程中不允许播放 @@ -820,6 +825,48 @@ int app_play_tips_file(int index) return 0; } +/* + * 随机播放一条对话响应超时提示音。 + * 只把 LittleFS 中实际存在的文件加入候选列表,新增音频尚未下载完成时, + * 仍可回退播放原来的 tts_error.mp3,不会随机到不存在的文件。 + */ +int app_play_random_tts_error(void) +{ + static const int timeout_prompt_indices[] = { + AUDIO_PROMPT_TTS_ERROR_INDEX, + AUDIO_PROMPT_TTS_ERROR_FIRST_INDEX, + AUDIO_PROMPT_TTS_ERROR_FIRST_INDEX + 1, + AUDIO_PROMPT_TTS_ERROR_FIRST_INDEX + 2, + AUDIO_PROMPT_TTS_ERROR_FIRST_INDEX + 3, + AUDIO_PROMPT_TTS_ERROR_FIRST_INDEX + 4, + AUDIO_PROMPT_TTS_ERROR_LAST_INDEX + }; + int valid_indices[sizeof(timeout_prompt_indices) / sizeof(timeout_prompt_indices[0])]; + int valid_count = 0; + int selected_index; + int i; + char filename_buff[64] = {0x00}; + + for(i = 0; i < (int)(sizeof(timeout_prompt_indices) / sizeof(timeout_prompt_indices[0])); i++){ + int prompt_index = timeout_prompt_indices[i]; + sprintf(filename_buff, "U:/%s", mp3_file[prompt_index]); + if(ql_access(filename_buff, 0) == 0){ //检查filename_buff指向的文件是否存在 + valid_indices[valid_count++] = prompt_index; + } + } + + if(valid_count == 0){ + printf("no local tts error prompt file\n"); + return -2; + } + + selected_index = valid_indices[hal_os_get_rand() % valid_count]; + printf("random tts_error prompt index:%d, file:%s\n", + selected_index, mp3_file[selected_index]); + + return app_play_tips_file(selected_index); +} + void app_player_thread(void *arvg) { ice_work_item *player_item=NULL; @@ -1023,7 +1070,8 @@ static void check_connect_thread_entry(void *parameter) printf("tts_error_set_speech1\n"); vad_set_speech_timeout_flag(1); - app_play_tips_file(9); + /* 对话响应超时后,从本地已有的 7 条提示音中随机播放一条 */ + app_play_random_tts_error(); //talkingq_ws_send_text("REQUEST_PROMPT_SOUND:tts_error"); //改为播放本地音频 听不清 请再说一遍 }