增加ln ws 音频控制接口 2516/1
authorhcj <1224667075@qq.com>
Wed, 15 Oct 2025 04:30:02 +0000 (12:30 +0800)
committerhcj <1224667075@qq.com>
Wed, 15 Oct 2025 04:30:02 +0000 (12:30 +0800)
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_websocket.c

index 2aa15c8..894f522 100644 (file)
@@ -1900,6 +1900,36 @@ static uint32_t ln_timeline_get_status_at(uint8_t *para, uint32_t paraLen, char
     return ERRCODE_SUCC;
 }
 
+/* AT^LN_WS_AUDIO_INIT - 初始化WebSocket音频 */
+static uint32_t ln_ws_audio_init_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    VAD_UNUSED(para);
+    VAD_UNUSED(paraLen);
+    VAD_UNUSED(strCommonCmd);
+    
+    printf("[LN][WS_AUDIO_INIT] Initializing WebSocket audio...\n");
+    
+    ln_ws_audio_init();
+    
+    printf("[LN][WS_AUDIO_INIT] WebSocket audio initialized successfully\n");
+    return ERRCODE_SUCC;
+}
+
+/* AT^LN_WS_AUDIO_DEINIT - 反初始化WebSocket音频 */
+static uint32_t ln_ws_audio_deinit_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    VAD_UNUSED(para);
+    VAD_UNUSED(paraLen);
+    VAD_UNUSED(strCommonCmd);
+    
+    printf("[LN][WS_AUDIO_DEINIT] Deinitializing WebSocket audio...\n");
+    
+    ln_ws_audio_deinit();
+    
+    printf("[LN][WS_AUDIO_DEINIT] WebSocket audio deinitialized successfully\n");
+    return ERRCODE_SUCC;
+}
+
 static const at_cmd_table_t g_ln_api_cmd[] = {
     /* ----------------------------------- VAD ---------------------------------- */
     {(char *)"AT^VAD_INIT", vad_init, (char *)"初始化 VAD"},
@@ -1940,6 +1970,8 @@ static const at_cmd_table_t g_ln_api_cmd[] = {
     {(char *)"AT^LN_WS_END_AUDIO_CHAT", ln_ws_end_audio_chat_at, (char *)"结束音频聊天: AT^LN_WS_END_AUDIO_CHAT"},
     {(char *)"AT^LN_WS_SEND_RANDOM_STORY", ln_ws_send_random_story_at, (char *)"发送随机故事请求: AT^LN_WS_SEND_RANDOM_STORY[=storyTheme]"},
     {(char *)"AT^LN_WS_SEND_VOICE_CHAT_INTERRUPT", ln_ws_send_voice_chat_interrupt_at, (char *)"发送语音聊天打断请求: AT^LN_WS_SEND_VOICE_CHAT_INTERRUPT[=reason]"},
+    {(char *)"AT^LN_WS_AUDIO_INIT", ln_ws_audio_init_at, (char *)"初始化WebSocket音频: AT^LN_WS_AUDIO_INIT"},
+    {(char *)"AT^LN_WS_AUDIO_DEINIT", ln_ws_audio_deinit_at, (char *)"反初始化WebSocket音频: AT^LN_WS_AUDIO_DEINIT"},
     
     /* 音频播放 */
     {(char *)"AT^LN_STORY_PLAY_AT", ln_audio_play_at, (char *)"播放音频: AT^LN_STORY_PLAY_AT"},
index 36bce24..289d4f4 100644 (file)
@@ -404,6 +404,10 @@ 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_deinit(void);
+
 /* WebSocket状态查询接口 */
 int ln_ws_get_connection_state(void);
 const char* ln_ws_get_connection_state_string(void);
index 0bf23ad..858b4f4 100644 (file)
@@ -867,7 +867,20 @@ int ln_ws_start(ws_message_callback_t_ln callback, uint32_t audio_timeout_ticks)
         return ret;
     }
 
-     AIVoiceAudioParams audioParams_in = {
+    ln_ws_audio_init();
+
+    // 注册音频数据写入回调
+    AI_RegisterWriteAudioDataCallback(ln_ws_audio_write_callback);
+
+    cat1_api_keep_wakeup(1);
+    cat1_api_wakeup_cat1(1);
+
+    return 0;
+}
+
+void ln_ws_audio_init(void)
+{
+    AIVoiceAudioParams audioParams_in = {
         .audioFormat = MP3,
         .channelCount = 1,
         .sampleRate = 16000
@@ -879,18 +892,18 @@ int ln_ws_start(ws_message_callback_t_ln callback, uint32_t audio_timeout_ticks)
         .sampleRate = 8000
     };
 
-    
     old_Start_AIVoice(AIVoiceDataCallback_ln,NULL,&audioParams_in,&audioParams_out,false);
+}
 
-    // 注册音频数据写入回调
-    AI_RegisterWriteAudioDataCallback(ln_ws_audio_write_callback);
-
-    cat1_api_keep_wakeup(1);
-    cat1_api_wakeup_cat1(1);
 
-    return 0;
+void ln_ws_audio_deinit(void)
+{
+    StopAIVoice();
 }
 
+
+
+
 /* 发送文本消息:仅在连接就绪时有效 */
 int ln_ws_send_text(const char *text)
 {
@@ -1039,7 +1052,7 @@ int ln_ws_send_voice_chat_interrupt(const char *reason)
     if (ret == 0) {
         LN_WS_DEBUG("VoiceChatInterrupt sent successfully\n");
         
-        if (need_reconnect) {
+        if (1) {
             // 如果检测到频繁数据接收,直接重连
             LN_WS_INFO("Triggering reconnection due to frequent binary data reception\n");
             if (ln_ws_reconnect() != 0) {
@@ -1640,6 +1653,8 @@ int ln_ws_enter_sleep(void)
     g_ws_connected = WS_STATE_SLEEP;
     LN_WS_DEBUG("Sleep mode activated, all operations paused\n");
     }
+
+    // ln_ws_audio_deinit();
     
     return ret;
 }
@@ -1664,7 +1679,9 @@ int ln_ws_exit_sleep(void)
     g_ws_connected = WS_STATE_DISCONNECTED;
     LN_WS_DEBUG("Sleep mode deactivated, resuming normal operations\n");
     }
-    
+
+    // ln_ws_audio_init();
+
     return ret;
 }