From 34f6fcc3cf5239c656a5b2f5015dcf5d87192b67 Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Thu, 8 Jan 2026 11:12:00 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E8=93=9D=E7=89=99=E6=92=AD?= =?utf8?q?=E6=94=BE=E7=8A=B6=E6=80=81=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../zhihui/leiniao/imsl_ln/ln_api_websocket.c | 15 ++++++++--- .../leiniao/imsl_ln/ln_websoket_api_ext.c | 25 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) 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 103936707..527294fb5 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c @@ -95,7 +95,7 @@ typedef enum { static volatile int g_ws_connected = WS_STATE_DISCONNECTED; static volatile int g_ws_running = 0; static volatile unsigned int g_ws_reconnect_count = 0; /* 断线后递增,用于URL reconnect参数 */ -static ws_message_callback_t g_ws_message_callback = NULL; /* 消息处理回调函数 */ + ws_message_callback_t g_ws_message_callback = NULL; /* 消息处理回调函数 */ static volatile ws_close_status_t g_ws_close_status = WS_CLOSE_NOT_EXECUTED; /* WebSocket关闭状态标志位 */ /* Base64数据缓存相关变量 */ @@ -228,7 +228,7 @@ static uint8_t g_audio_cache_buffer[AUDIO_CACHE_BUFFER_SIZE]; static uint32_t g_audio_cache_pos = 0; // 当前写入位置 static uint32_t g_audio_cache_total = 0; // 总写入数据量 static bool g_audio_cache_wrapped = false; // 是否已循环 -static uint32_t g_audio_playback_start_tick = 0; // 音频播放开始时间tick + uint32_t g_audio_playback_start_tick = 0; // 音频播放开始时间tick // VAD冷却时间相关变量 static uint32_t g_vad_cooldown_start_tick = 0; // VAD冷却开始时间tick @@ -537,7 +537,14 @@ static void ln_ws_audio_write_callback(uint32_t size) // 更新最后一次音频写入tick g_last_audio_write_tick = osKernelGetTickCount(); - g_audio_playback_active = true; + g_audio_playback_active = true; + extern bool a2dp_is_connect; + if(ln_get_A2dpSrcPlayingStat()!=1 && a2dp_is_connect) + { + int ret = a2dp_src_start_playing(ln_bt_get_last_conned_device_Addr()); // 设置耳机的状态为播放 + + LN_WS_DEBUG("a2dp_src_start_playing %d \n", ret); + } } // 发送音频数据到WebSocket @@ -1328,7 +1335,7 @@ void vad_status_callback_ln_ws(int status) void ln_ws_audio_init(bool is_vad_server_enabled) { - // 检查是否已经初始化 + // 检查是否已经初始化 if (g_audio_initialized) { LN_WS_WARN("Audio already initialized, skipping duplicate initialization\n"); return; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_websoket_api_ext.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_websoket_api_ext.c index 3890cb8e2..ccb6f7b2c 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_websoket_api_ext.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_websoket_api_ext.c @@ -11,6 +11,7 @@ #include #include #include "wearable_log.h" +#include "haisi_websocket.h" #ifdef __cplusplus extern "C" { @@ -19,6 +20,10 @@ extern "C" { /* 下载服务初始化状态标志 */ static uint8_t g_download_service_initialized = 0; +extern ws_message_callback_t g_ws_message_callback; /* 消息处理回调函数 */ + +extern uint32_t g_audio_playback_start_tick ; // 音频播放开始时间tick + /* Python服务版本号声明 */ extern uint8_t g_py_ver; /* Python服务版本号 */ @@ -63,6 +68,26 @@ static int ln_http_download_data_callback(const uint8_t *data, uint32_t data_len } AI_SendAudioDataToQueue(data, data_len); + + if (!g_audio_playback_active) { + g_audio_playback_start_tick = osKernelGetTickCount(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"Audio playback started at tick: %u\n", g_audio_playback_start_tick); + + // 触发音频播放开始事件 + if (g_ws_message_callback != NULL) { + g_ws_message_callback(NULL, WS_CMD_AUDIO_PLAYBACK_START); + } + + + } + extern bool a2dp_is_connect; + if(ln_get_A2dpSrcPlayingStat()!=1 && a2dp_is_connect) + { + int ret = a2dp_src_start_playing(ln_bt_get_last_conned_device_Addr()); // 设置耳机的状态为播放 + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"a2dp_src_start_playing %d \n", ret); + } + return 0; } -- 2.17.1