From: hcj <1224667075@qq.com> Date: Mon, 20 Oct 2025 07:36:13 +0000 (+0800) Subject: 增加音频初始化状态位判断,防止错误调用 X-Git-Tag: V1.0.9_20251128_194606_LN~199 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=7c8929a2918205fd0ea74ed6b9b7cd239925df86;p=mirrors%2FFD230.git 增加音频初始化状态位判断,防止错误调用 --- diff --git a/cat1modem/n9/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725_W9_20251020-1419.zip b/cat1modem/n9/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725_W9_20251020-1419.zip new file mode 100644 index 000000000..e00f69250 Binary files /dev/null and b/cat1modem/n9/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725_W9_20251020-1419.zip differ 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 ad61576ea..4d893b94b 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c @@ -90,6 +90,9 @@ static bool g_base64_in_progress = false; /* 是否正在进行Base64数据接 /* 音频聊天命令类型 */ static ln_audio_chat_command_t g_audio_chat_command_type = LN_AUDIO_CHAT_VOICE_CHAT_REQUEST; +/* 音频初始化状态标志位 */ +static volatile bool g_audio_initialized = false; + /* 回调函数结构体 */ static ws_call_backs_t g_ws_callbacks = {0}; @@ -453,6 +456,12 @@ static void ln_ws_audio_write_callback(uint32_t size) // 发送音频数据到WebSocket int ln_ws_send_audio_data(const uint8_t *audio_data, uint32_t audio_size, bool finished) { + // 检查音频是否已初始化 + if (!g_audio_initialized) { + LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n"); + return -1; + } + // 检查结束标志位,如果设置了结束标志,则finished必须为true if (g_audio_chat_ending && !finished) { LN_WS_WARN("Audio chat is ending, finished must be true\n"); @@ -610,6 +619,12 @@ int ln_ws_send_audio_data(const uint8_t *audio_data, uint32_t audio_size, bool f // 开始新的音频聊天 int ln_ws_start_audio_chat(ln_audio_chat_command_t command_type) { + // 检查音频是否已初始化 + if (!g_audio_initialized) { + LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n"); + return -1; + } + if(g_ws_connected != WS_STATE_CONNECTED) { LN_WS_WARN("g_ws_connected!=WS_STATE_CONNECTED"); @@ -648,6 +663,12 @@ int ln_ws_start_audio_chat(ln_audio_chat_command_t command_type) // 结束当前音频聊天 int ln_ws_end_audio_chat(void) { + // 检查音频是否已初始化 + if (!g_audio_initialized) { + LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n"); + return -1; + } + if (!g_audio_chat_ctx.is_active) { LN_WS_WARN("No active audio chat to end\n"); return -1; @@ -878,6 +899,12 @@ int ln_ws_start(ws_message_callback_t_ln callback, uint32_t audio_timeout_ticks) void ln_ws_audio_init(void) { + // 检查是否已经初始化 + if (g_audio_initialized) { + LN_WS_WARN("Audio already initialized, skipping duplicate initialization\n"); + return; + } + AIVoiceAudioParams audioParams_in = { .audioFormat = MP3, .channelCount = 1, @@ -896,17 +923,37 @@ void ln_ws_audio_init(void) #endif old_Start_AIVoice(AIVoiceDataCallback_ln,NULL,&audioParams_in,&audioParams_out,false); + + // 设置初始化标志位 + g_audio_initialized = true; + LN_WS_INFO("Audio initialization completed successfully\n"); } void ln_ws_audio_deinit(void) { + // 检查是否已经反初始化 + if (!g_audio_initialized) { + LN_WS_WARN("Audio not initialized, skipping duplicate deinitialization\n"); + return; + } + StopAIVoice(); #ifdef SUPPORT_CAT1_SERVICE cat1_api_keep_wakeup(0); cat1_api_wakeup_cat1(0); #endif + + // 清除初始化标志位 + g_audio_initialized = false; + LN_WS_INFO("Audio deinitialization completed successfully\n"); +} + +/* 获取音频初始化状态 */ +bool ln_ws_is_audio_initialized(void) +{ + return g_audio_initialized; } @@ -926,6 +973,12 @@ int ln_ws_send_text(const char *text) /* 发送随机故事请求 */ int ln_ws_send_random_story_request(const char *story_theme) { + // 检查音频是否已初始化 + if (!g_audio_initialized) { + LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n"); + return -1; + } + if (!story_theme) { LN_WS_ERROR("Invalid story theme parameter\n"); return -1; @@ -998,6 +1051,12 @@ int ln_ws_send_random_story_request(const char *story_theme) /* 发送语音聊天打断请求 */ int ln_ws_send_voice_chat_interrupt(const char *reason) { + // 检查音频是否已初始化 + if (!g_audio_initialized) { + LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n"); + return -1; + } + if (!reason) { LN_WS_ERROR("Invalid reason parameter\n"); return -1; @@ -2311,6 +2370,12 @@ static void ln_ws_audio_buffer_flush(void) */ static int ln_ws_send_audio_data_direct(const uint8_t *audio_data, uint32_t audio_size, bool finished) { + // 检查音频是否已初始化 + if (!g_audio_initialized) { + LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n"); + return -1; + } + // 对于正常音频数据,必须有有效的数据 if (!finished && (!audio_data || audio_size == 0)) { LN_WS_ERROR("Invalid audio data parameters\n");