diff --git a/main/xiaozhi-server/core/connection.py b/main/xiaozhi-server/core/connection.py index 2a6a8168..dbb2bf7a 100644 --- a/main/xiaozhi-server/core/connection.py +++ b/main/xiaozhi-server/core/connection.py @@ -68,7 +68,7 @@ class ConnectionHandler: self.logger = setup_logging() self.server = server # 保存server实例的引用 - self.need_bind = True # 是否需要绑定设备 + self.need_bind = False # 是否需要绑定设备 self.bind_completed_event = asyncio.Event() self.bind_code = None # 绑定设备的验证码 self.last_bind_prompt_time = 0 # 上次播放绑定提示的时间戳(秒) @@ -270,15 +270,12 @@ class ConnectionHandler: async def _route_message(self, message): """消息路由""" try: - await asyncio.wait_for(self.bind_completed_event.wait(), timeout=1) + await asyncio.wait_for(self.bind_completed_event.wait(), timeout=2) except asyncio.TimeoutError: # 未绑定设备直接丢弃所有消息 current_time = time.time() # 检查是否需要播放绑定提示 - if ( - current_time - self.last_bind_prompt_time - >= self.bind_prompt_interval - ): + if current_time - self.last_bind_prompt_time >= self.bind_prompt_interval: self.last_bind_prompt_time = current_time # 复用现有的绑定提示逻辑 from core.handle.receiveAudioHandle import check_bind_device @@ -416,6 +413,14 @@ class ConnectionHandler: def _initialize_components(self): try: + if self.tts is None: + self.tts = self._initialize_tts() + # 打开语音合成通道 + asyncio.run_coroutine_threadsafe( + self.tts.open_audio_channels(self), self.loop + ) + if self.need_bind: + return self.selected_module_str = build_module_string( self.config.get("selected_module", {}) ) @@ -439,17 +444,10 @@ class ConnectionHandler: # 初始化声纹识别 self._initialize_voiceprint() - # 打开语音识别通道 asyncio.run_coroutine_threadsafe( self.asr.open_audio_channels(self), self.loop ) - if self.tts is None: - self.tts = self._initialize_tts() - # 打开语音合成通道 - asyncio.run_coroutine_threadsafe( - self.tts.open_audio_channels(self), self.loop - ) """加载记忆""" self._initialize_memory() @@ -464,8 +462,6 @@ class ConnectionHandler: self.logger.bind(tag=TAG).error(f"实例化组件失败: {e}") def _init_prompt_enhancement(self): - if self.need_bind: - return # 更新上下文信息 self.prompt_manager.update_context_info(self, self.client_ip) @@ -515,9 +511,6 @@ class ConnectionHandler: def _initialize_voiceprint(self): """为当前连接初始化声纹识别""" - if self.need_bind: - return - try: voiceprint_config = self.config.get("voiceprint", {}) if voiceprint_config: @@ -545,6 +538,7 @@ class ConnectionHandler: async def _initialize_private_config_async(self): """从接口异步获取差异化配置(异步版本,不阻塞主循环)""" if not self.read_config_from_api: + self.bind_completed_event.set() return try: begin_time = time.time()