From: hcj <1224667075@qq.com> Date: Wed, 15 Oct 2025 04:30:02 +0000 (+0800) Subject: 增加ln ws 音频控制接口 X-Git-Tag: V1.0.9_20251128_194606_LN~248 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=73600fc65d5ffc99b8f46668717e24ef6f385b48;p=mirrors%2FFD230.git 增加ln ws 音频控制接口 --- diff --git a/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c b/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c index 2aa15c899..894f5223f 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c @@ -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"}, diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h index 36bce2407..289d4f4d3 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h @@ -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); diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c index 0bf23ad32..858b4f429 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c @@ -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; }