优化tts发送文本逻辑解决长时间tick不更新导致的不播放问题 2095/1 2095/head 2098/target/1
authorluozheng <1732036298@qq.com>
Sat, 16 Aug 2025 10:57:26 +0000 (18:57 +0800)
committerluozheng <1732036298@qq.com>
Sat, 16 Aug 2025 10:57:26 +0000 (18:57 +0800)
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ai_server.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.h

index 6519562..30f7a0b 100644 (file)
@@ -1530,6 +1530,7 @@ namespace OHOS
     // 添加一个静态变量用于跟踪连续出现0的次数
     static int s_tts_tick_zero_count = 0;
     static int continue_zero_count = 0; // 静态变量:记录连续为0的次数(初始化为0)
+    static int fouce_count = 0; // 
     static void AI4G_IS_START_TTS_CallbackProc(int data)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AI4G_IS_START_TTS_CallbackProc:%s", AiVoiceModel::GetInstance().GetAccumulatedText().c_str());
@@ -1575,6 +1576,7 @@ namespace OHOS
                 {
                     AiVoiceModel::GetInstance().ProcessTextByPunctuation();
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "发送TTS文本(连续第%d次为0,奇数次)", continue_zero_count);
+                    fouce_count = 0;
                 }
             }
             else // 偶数次(第2、4、6...次):跳过
@@ -1585,6 +1587,16 @@ namespace OHOS
         else
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "get_bk_websocket_tts_tick:%d(不满足发送条件)", get_bk_websocket_tts_tick());
+            fouce_count++;
+            if(fouce_count >= 20)
+            {
+                if (!get_ai_osal_msg_queue_is_full())
+                {
+                    AiVoiceModel::GetInstance().ProcessTextByPunctuation();
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "强行发送fouce_count:%d", fouce_count);
+                    fouce_count = 0;
+                }
+            }
         }
         return;
     }
@@ -1648,6 +1660,7 @@ namespace OHOS
             AI4G_IS_START_TTS_PLAY_CNT = NUMBER_TEN;
             s_tts_tick_zero_count = 0; // 重置计数器
             continue_zero_count = 0;   // 重置静态变量
+            fouce_count = 0;
         }
     }
 
index 3603915..9e3f299 100644 (file)
@@ -274,7 +274,7 @@ bool ai_system_health_check(void);
 
 static osTimerId_t g_timer_time_sync = NULL;
 
-void uapi_start_tts_single_txt(char *buf);
+bool uapi_start_tts_single_txt(char *buf);
 
 void uapi_start_tts_single(void);
 
@@ -951,7 +951,7 @@ void set_ai_tts_server_init_flag(uint8_t flag)
     ai_tts_server_init_flag = flag;
 }
 
-uint8_t get_bk_websocket_tts_tick(void)
+uint32_t get_bk_websocket_tts_tick(void)
 {
     return bk_websocket_tts_tick;
 }
@@ -1942,7 +1942,7 @@ void uapi_start_tts_single(void)
 }
 
  
- void uapi_start_tts_single_txt(char *buf)
+bool uapi_start_tts_single_txt(char *buf)
 {
     
 
@@ -1979,11 +1979,12 @@ void uapi_start_tts_single(void)
     {
         tts_reconnect=0;
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+        free(jsonString);
+        return true;
     }
-   
-
     free(jsonString);
-    }
+    return false;
+}
 
 // char *tts_txt_str=
 
@@ -2236,7 +2237,7 @@ TTS_SATRT:
                     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "TTS binary data received: %d bytes", len);
                     msleep(1);
                 } else if (type == WS_TEXT) {
-                    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "TTS text data received: %s", tts_recv_buf);
+                    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "TTS text data received: %s %d %d", tts_recv_buf,bk_websocket_tts_tick,osKernelGetTickCount());
                     send_msg_data_into_Ai_msg_queue((uint8_t *)tts_recv_buf, len, 201);
                     bk_websocket_tts_tick = 0;
                 } else if (type == WS_PONG) {
index ade7af4..ed1a697 100644 (file)
@@ -14,7 +14,7 @@ void uapi_UI_start_asr(uint8_t type);
 
 void uapi_UI_stop_asr(void);
 
-void uapi_start_tts_single_txt(char *buf);
+bool uapi_start_tts_single_txt(char *buf);
 
 void uapi_UI_stop_start_asr_timeout(void);
 
@@ -52,7 +52,7 @@ uint8_t get_ai_chat_service_init_flag(void);
 void set_ai_chat_service_init_flag(uint8_t flag);
 uint8_t get_ai_tts_server_init_flag(void);
 void set_ai_tts_server_init_flag(uint8_t flag);
-uint8_t get_bk_websocket_tts_tick(void);
+uint32_t get_bk_websocket_tts_tick(void);
 
 void uapi_start_asr_task(void);