diff --git a/takway/clients/client_utils.py b/takway/clients/client_utils.py index f1b6066..30c8781 100644 --- a/takway/clients/client_utils.py +++ b/takway/clients/client_utils.py @@ -188,5 +188,5 @@ class BaseWebSocketClient: print(f"json: {recv_data}") return recv_data, type(recv_data) except json.JSONDecodeError as e: - pass + return None, None \ No newline at end of file diff --git a/takway/clients/web_socket_client_utils.py b/takway/clients/web_socket_client_utils.py index a62b6b4..bfab6dc 100644 --- a/takway/clients/web_socket_client_utils.py +++ b/takway/clients/web_socket_client_utils.py @@ -377,30 +377,35 @@ class WebSocketClinet: response, data_type = client.receive_per_data() if data_type == dict: print(f"{datetime.now()}: receive json data: {response}") # 打印接收到的消息 - # 误识别情况 - if response['code'] in [201, 501, 502, 503, 504, 505] : - # 恢复对话状态 + # 5xx: 结束错误码处理 + if response['code'] in [501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545]: + # 恢复录音状态 self.listening_event.set() self.speaking_event.clear() break + # 200: 正常结束 elif response['code'] == 200: - self.audio_play_queue.put(('audio_json', response)) - # 切换播放模式 - self.listening_event.clear() - self.speaking_event.set() if response['type'] == 'close': break + # 201: 切换沉默模式 + elif response['code'] == 201: + self.listening_event.set() + self.speaking_event.clear() + self.wakeup_event.clear() # 沉默状态下,关闭唤醒状态 elif data_type == list: - # ####################### 更新后的代码 # - print(f"{datetime.now()}: receive audio_list") - self.audio_play_queue.put(('audio_list', response)) + print(f"{datetime.now()}: receive text_audio_data") + # 切换播放模式 + self.listening_event.clear() + self.speaking_event.set() + self.audio_play_queue.put(('text_audio_data', response)) elif data_type == bytes: # 开始播放 - # print(f"{datetime.now()}: receive audio data") + print(f"{datetime.now()}: receive audio bytes") self.audio_play_queue.put(('audio_bytes', response)) elif data_type == None: print(f"{datetime.now()}: receive None data, break loop.") + # 切换录音模式 self.listening_event.set() self.speaking_event.clear() # print(f"listening_event: {self.listening_event.is_set()}, speaking_event: {self.speaking_event.is_set()}") @@ -423,13 +428,12 @@ class WebSocketClinet: if not self.wakeup_event.is_set(): continue - if item[0] == 'audio_list': + if item[0] == 'text_audio_data': # TODO: 判断bytes是否是最后一个,如果是最后一个,则播放完毕,切换监听模式 - audio_info, audio_data = item[1] - data_type = audio_info['type'] - print(f"{datetime.now()}: receive {data_type} data, start playing audio.") + audio_text, audio_data = item[1] print(f"{datetime.now()}: start playing audio.") + print(f"{datetime.now()}: audio text: {audio_text}") if self.listening_event.is_set(): continue