[bug] board

This commit is contained in:
IrvingGao committed 2024-05-23 20:00:40 +08:00
1 parent 6a9edd9139
commit 2a298fb5e2
3 files changed
+113 -46

No files matched your search

+55 -44
View File
@@ -398,19 +398,24 @@ class WebSocketClinet:
self.speaking_event.clear()
break
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
elif data_type == list:
# ####################### 更新后的代码 #
print(f"{datetime.now()}: receive audio_list")
self.audio_play_queue.put(('audio_list', response))
elif data_type == bytes:
# 开始播放
print(f"{datetime.now()}: receive audio data")
print(f"listening_event: {self.listening_event.is_set()}, speaking_event: {self.speaking_event.is_set()}")
# print(f"{datetime.now()}: receive audio data")
self.audio_play_queue.put(('audio_bytes', response))
elif data_type == None:
print(f"{datetime.now()}: receive None data, break loop.")
print(f"listening_event: {self.listening_event.is_set()}, speaking_event: {self.speaking_event.is_set()}")
# print(f"listening_event: {self.listening_event.is_set()}, speaking_event: {self.speaking_event.is_set()}")
break # 如果没有接收到消息,则退出循环
@@ -430,51 +435,57 @@ class WebSocketClinet:
if not self.wakeup_event.is_set():
continue
audio_list.append(item[1])
print(f"{datetime.now()}: start playing audio.")
if self.listening_event.is_set():
continue
if not self.speaking_event.is_set():
continue
# 播放音频
try:
if item[0] == 'audio_list':
# TODO: 判断bytes是否是最后一个,如果是最后一个,则播放完毕,切换监听模式
audio_info, audio_data = item[1]
data_type = audio_info['type']
tts_audio = audio_list[0] # 取出第一个音频
tts_audio = audio_player.check_audio_type(tts_audio, return_type=None)
for i in range(0, len(tts_audio), audio_player.CHUNK):
audio_player.stream.write(tts_audio[i:i+audio_player.CHUNK])
print("Playing {} data...{}/{}".format(item[0], i, len(tts_audio)))
# 按键打断播放
if self.listening_event.is_set() and not self.speaking_event.is_set():
print(f"{datetime.now()}: speaker interrupt.")
break
# 关闭状态
if not self.wakeup_event.is_set():
print(f"{datetime.now()}: speaker close.")
self.listening_event.clear()
self.speaking_event.clear()
break
print(f"{datetime.now()}: start playing audio.")
if not self.speaking_event:
audio_list = [] # 清空音频列表
if self.listening_event.is_set():
continue
# 播放最后一段音频
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
if not self.speaking_event.is_set():
continue
audio_list.append(audio_data)
# 播放音频
try:
tts_audio = audio_list[0] # 取出第一个音频
tts_audio = audio_player.check_audio_type(tts_audio, return_type=None)
for i in range(0, len(tts_audio), audio_player.CHUNK):
audio_player.stream.write(tts_audio[i:i+audio_player.CHUNK])
print("Playing {} data...{}/{}".format(item[0], i, len(tts_audio)))
# 按键打断播放
if self.listening_event.is_set() and not self.speaking_event.is_set():
print(f"{datetime.now()}: speaker interrupt.")
break
# 关闭状态
if not self.wakeup_event.is_set():
print(f"{datetime.now()}: speaker close.")
self.listening_event.clear()
self.speaking_event.clear()
break
if not self.speaking_event:
audio_list = [] # 清空音频列表
continue
# 播放最后一段音频
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
if self.wakeup_event.is_set():
if data_type == 'end':
# 启动监听状态
self.speaking_event.clear()
self.listening_event.set()
if self.wakeup_event.is_set():
# 启动监听状态
self.speaking_event.clear()
self.listening_event.set()