/* 音频聊天命令类型 */
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};
// 发送音频数据到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");
// 开始新的音频聊天
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");
// 结束当前音频聊天
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;
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,
#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;
}
/* 发送随机故事请求 */
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;
/* 发送语音聊天打断请求 */
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;
*/
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");