diff --git a/takway/clients/web_socket_client_utils.py b/takway/clients/web_socket_client_utils.py index ec0916c..80d80d5 100644 --- a/takway/clients/web_socket_client_utils.py +++ b/takway/clients/web_socket_client_utils.py @@ -371,6 +371,7 @@ class WebSocketClinet: break if self.interrupt_event.is_set(): + client.close_client() break response, data_type = client.receive_per_data() @@ -411,7 +412,6 @@ class WebSocketClinet: # print(f"listening_event: {self.listening_event.is_set()}, speaking_event: {self.speaking_event.is_set()}") break # 如果没有接收到消息,则退出循环 client.close_client() - self.interrupt_event.clear() def audio_play_process(self): @@ -462,24 +462,22 @@ class WebSocketClinet: # 按键打断播放 if self.interrupt_event.is_set(): print(f"{datetime.now()}: button interrupt.") - # 虽然程序到这里,但是扬声器不一定播放完毕,延迟用来避免问题 - time.sleep(0.5) + time.sleep(0.2) # 虽然程序到这里,但是扬声器不一定播放完毕,延迟用来避免问题 self.listening_event.set() self.speaking_event.clear() + self.interrupt_event.clear() break - # if self.listening_event.is_set() and not self.speaking_event.is_set(): - # print(f"{datetime.now()}: speaker interrupt.") - # break - - if not self.speaking_event: + if not self.speaking_event.is_set(): audio_list = [] # 清空音频列表 + print(f"{datetime.now()}: audio data clear.") continue - # 播放最后一段音频 - audio_player.stream.write(tts_audio[i+audio_player.CHUNK:]) - audio_list.pop(0) # 弹出第一个音频 - print(f"{datetime.now()}: audio data played.") + else: + # 播放最后一段音频 + audio_player.stream.write(tts_audio[i+audio_player.CHUNK:]) + audio_list.pop(0) # 弹出第一个音频 + print(f"{datetime.now()}: audio data played.") except TypeError as e: print(f"audio play error: {e}") continue