增加初始化音频可选vad参数,
authorxue <2144439972@qq.com>
Wed, 10 Dec 2025 01:59:37 +0000 (09:59 +0800)
committerxue <2144439972@qq.com>
Wed, 10 Dec 2025 01:59:37 +0000 (09:59 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp
code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h
code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c
code/sdk/zhihui/utils/custom_cmd_service.c
code/sdk/zhihui/utils/custom_utils.h

index 9c1767b..a93c4cd 100644 (file)
@@ -2573,6 +2573,7 @@ extern "C" {
          return true; // 异步调用,返回 true 表示调用已提交
      }
 
+    //接收到哄睡模式开始请求
     void ThunderBirdModel::HandleSleepModeStart(const char* theme, int is_intention_result)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart");
@@ -2587,7 +2588,7 @@ extern "C" {
            //若为意图识别结果,则跳转到4,否则跳转到2
            if(is_intention_result == 0)
            {
-              do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+              do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE, NULL, 0);
               WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart: 非意图识别结果,跳转到4");
                 // 重置故事模式finished标志,确保每次进入故事模式时标志位是干净的
                 m_storyModeFinished = false;
@@ -3188,16 +3189,16 @@ extern "C" {
     // 进入对话模式时记录当前表情
     void ThunderBirdModel::OnEnterDialogueMode()
     {
+         // 记录进入对话模式前的时间线表情(用于退出时恢复)
+         m_dialogueExpression = "winking";
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterDialogueMode: 记录时间线表情: %s", m_currentExpression.c_str());
         // 重置对话模式finished标志
         m_dialogueModeFinished = false;
         //如果本来就是眨眼的表情直接返回
         if (m_currentExpression == "winking" || m_currentExpression.empty() == true) {
             return;
         }
-        // 记录进入对话模式前的时间线表情(用于退出时恢复)
-        m_dialogueExpression = "winking";
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterDialogueMode: 记录时间线表情: %s", m_currentExpression.c_str());
-        
+       
         // 应用音量(如果在STATUS_SHOW界面调节过音量,此时应用)
         auto *reminderView = ThunderBirdReminderView::GetInstance();
         if (reminderView && reminderView->IsVolumeViewVisible()) {
@@ -3282,14 +3283,13 @@ extern "C" {
     // 进入哄睡模式时记录当前表情(进入THUNDERBIRD_LULLABYVIEW_4时调用)
     void ThunderBirdModel::OnEnterLullabyMode()
     {
+        // 记录进入哄睡模式前的时间线表情(用于退出时恢复)
+        m_lullabyExpression = "winking";
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterLullabyMode: 记录时间线表情: %s", m_currentExpression.c_str());
         //如果本来就是眨眼的表情直接返回
         if (m_currentExpression == "winking" || m_currentExpression.empty() == true) {
             return;
         }
-        // 记录进入哄睡模式前的时间线表情(用于退出时恢复)
-        m_lullabyExpression = "winking";
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterLullabyMode: 记录时间线表情: %s", m_currentExpression.c_str());
-        
         // 应用音量(如果在STATUS_SHOW界面调节过音量,此时应用)
         auto *reminderView = ThunderBirdReminderView::GetInstance();
         if (reminderView && reminderView->IsVolumeViewVisible()) {
index c07f690..0106cfb 100644 (file)
@@ -741,7 +741,7 @@ namespace OHOS
                     isDialogueing = true;
                     //未绑定状态,联网隐藏网络断开提醒
                     // 开始对话
-                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE, NULL, 0);
                     // ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
                     
                     break;
@@ -811,7 +811,7 @@ namespace OHOS
             case ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3:
             {
                 // 进入哄睡模式时切换为眨眼表情
-                ln_ws_audio_init();//功耗优化
+                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE, NULL, 0);
                 ThunderBirdModel::GetInstance()->OnEnterLullabyMode();
                 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4);
                 // ln_ws_start_audio_chat(LN_AUDIO_CHAT_CHOOSE_STORY_REQUEST);
@@ -1127,7 +1127,6 @@ namespace OHOS
             if((currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW) 
             || (currentView == THUNDERBIRD_GUIDEVIEW))
             {
-                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
                 // 检查WebSocket连接状态
                 int wsState = ln_ws_get_connection_state();
                 bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
@@ -1168,7 +1167,7 @@ namespace OHOS
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "vad认证不成功,不进入对话模式");
                     return;
                 }
-                
+                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE, NULL, 0);
                 // 条件满足,进入对话模式
                 ThunderBirdModel::GetInstance()->LowFrequence();//减低视频帧率
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入对话模式");
index 52694ae..8584242 100644 (file)
@@ -1650,7 +1650,7 @@ static uint32_t ln_ws_audio_init_at(uint8_t *para, uint32_t paraLen, char *strCo
     
     printf("[LN][WS_AUDIO_INIT] Initializing WebSocket audio...\n");
     
-    ln_ws_audio_init();
+    ln_ws_audio_init(true);
     
     printf("[LN][WS_AUDIO_INIT] WebSocket audio initialized successfully\n");
     return ERRCODE_SUCC;
index de32d45..4bb42c7 100644 (file)
@@ -528,7 +528,7 @@ int ln_ws_stop(void);
 int ln_ws_enter_sleep(void);
 int ln_ws_exit_sleep(void);
 
-void ln_ws_audio_init(void);
+void ln_ws_audio_init(bool is_vad_server_enabled);
 
 void ln_ws_audio_deinit(void);
 
index 9586be5..530d27b 100644 (file)
@@ -315,11 +315,11 @@ void uapi_set_sleep_mode_active(bool active)
 /* 解析哄睡模式开始:提取data.storyTheme并触发随机故事 */
 void ln_parse_sleep_mode_start(const char *json_str, int json_len)
 {
-    if(g_sleep_mode_active)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] sleep mode already active\n");
-        return;
-    }
+    // if(g_sleep_mode_active)
+    // {
+    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] sleep mode already active\n");
+    //     return;
+    // }
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] parse json\n");
        (void)json_len;
        if (json_str == NULL) {
index 49978ca..3619f18 100644 (file)
@@ -1278,7 +1278,7 @@ void vad_status_callback_ln_ws(int status)
 
 }
 
-void ln_ws_audio_init(void)
+void ln_ws_audio_init(bool is_vad_server_enabled)
 {
     // 检查是否已经初始化
     if (g_audio_initialized) {
@@ -1326,23 +1326,25 @@ void ln_ws_audio_init(void)
     LN_WS_INFO("Audio initialization completed successfully\n");
     
 #if ENABLE_VAD_SERVER
-    // 如果 VAD 服务器已启用,则初始化 VAD 服务器
-    ln_ws_enable_vad_server();
-
-    if (g_vad_server_enabled && !g_vad_server_initialized) {
-        LN_WS_INFO("Initializing VAD server...\n");
-        errcode_t ret = vad_server_init(vad_status_callback_ln_ws);  // 使用 NULL 回调,也可以传入自定义回调
-        if (ret == ERRCODE_SUCC) {
-            g_vad_server_initialized = true;
-            LN_WS_INFO("VAD server initialized successfully\n");
-            // 通知 UI VAD 服务器初始化完成,取消等待提醒
-            if (g_ws_message_callback != NULL) {
-                g_ws_message_callback(NULL, WS_CMD_VAD_INITIALIZED);
+    if (is_vad_server_enabled) {
+        // 如果 VAD 服务器已启用,则初始化 VAD 服务器
+        ln_ws_enable_vad_server();
+
+        if (g_vad_server_enabled && !g_vad_server_initialized) {
+            LN_WS_INFO("Initializing VAD server...\n");
+            errcode_t ret = vad_server_init(vad_status_callback_ln_ws);  // 使用 NULL 回调,也可以传入自定义回调
+            if (ret == ERRCODE_SUCC) {
+                g_vad_server_initialized = true;
+                LN_WS_INFO("VAD server initialized successfully\n");
+                // 通知 UI VAD 服务器初始化完成,取消等待提醒
+                if (g_ws_message_callback != NULL) {
+                    g_ws_message_callback(NULL, WS_CMD_VAD_INITIALIZED);
+                }
+            } else {
+                LN_WS_ERROR("Failed to initialize VAD server: %d\n", ret);
             }
-        } else {
-            LN_WS_ERROR("Failed to initialize VAD server: %d\n", ret);
         }
-    }
+    } 
 #endif
 }
 
index ae10dfc..b88c38e 100644 (file)
@@ -472,10 +472,13 @@ case CUSTOM_CMD_MSG_START_AI_ASR:
 #endif
             break;
 #ifdef BOARD_LEINIAO
-        case CUSTOM_CMD_MSG_AUDIO_INIT:
-            PRINT("Audio init via custom cmd\n");
-            //osDelay(1000);
-            ln_ws_audio_init();
+        case CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE:
+            PRINT("Audio init via custom cmd (VAD enabled)\n");
+            ln_ws_audio_init(true);
+            break;
+        case CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE:
+            PRINT("Audio init via custom cmd (VAD disabled)\n");
+            ln_ws_audio_init(false);
             break;
         case CUSTOM_CMD_MSG_AUDIO_DEINIT:
             PRINT("Audio deinit via custom cmd\n");
index 0ec0b18..a21ee5c 100644 (file)
@@ -259,15 +259,16 @@ uint32_t uapi_calendar_store_date(void);
 
 #define CUSTOM_CMD_MSG_AUDIO_DEINIT 0x26
 
-#define CUSTOM_CMD_MSG_AUDIO_INIT 0x27
+#define CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE 0x27
+#define CUSTOM_CMD_MSG_AUDIO_INIT_VAD_DISABLE 0x28
 
-#define CUSTOM_CMD_MSG_VAD_AUTH 0x28
+#define CUSTOM_CMD_MSG_VAD_AUTH 0x29
 
-#define CUSTOM_CMD_MSG_ROTARY_OPEN 0x29
+#define CUSTOM_CMD_MSG_ROTARY_OPEN 0x2A
 
-#define CUSTOM_CMD_MSG_START_SECOND_STREAM_IN 0x30
+#define CUSTOM_CMD_MSG_START_SECOND_STREAM_IN 0x2B
 
-#define CUSTOM_CMD_MSG_STOP_SECOND_STREAM_IN 0x31
+#define CUSTOM_CMD_MSG_STOP_SECOND_STREAM_IN 0x2C
 
 
 typedef enum {