[bug] board
This commit is contained in:
parent
4c60b07df1
commit
ebc7c9452c
|
@ -160,6 +160,12 @@ class WebSocketClinet:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.wakeup_event.clear()
|
self.wakeup_event.clear()
|
||||||
|
|
||||||
|
if self.interrupt_event.is_set():
|
||||||
|
self.speaking_event.clear()
|
||||||
|
self.listening_event.set()
|
||||||
|
self.interrupt_event.clear()
|
||||||
|
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
def voice_trigger_thread(self, recorder):
|
def voice_trigger_thread(self, recorder):
|
||||||
|
@ -313,8 +319,9 @@ class WebSocketClinet:
|
||||||
continue
|
continue
|
||||||
print(f"web socket: {self.wakeup_event.is_set()}, {self.interrupt_event.is_set()}, {self.listening_event.is_set()}")
|
print(f"web socket: {self.wakeup_event.is_set()}, {self.interrupt_event.is_set()}, {self.listening_event.is_set()}")
|
||||||
print(f"{datetime.now()}: start setup web socket connection.")
|
print(f"{datetime.now()}: start setup web socket connection.")
|
||||||
# 唤醒
|
|
||||||
if self.wakeup_event.is_set() and not self.interrupt_event.is_set():
|
# 第一级:唤醒状态下,连接服务器
|
||||||
|
if self.wakeup_event.is_set():
|
||||||
client.wakeup_client()
|
client.wakeup_client()
|
||||||
clear_queue_flag = False
|
clear_queue_flag = False
|
||||||
else:
|
else:
|
||||||
|
@ -325,14 +332,17 @@ class WebSocketClinet:
|
||||||
# 发送数据
|
# 发送数据
|
||||||
for queue_data in QueueIterator(self.client_queue):
|
for queue_data in QueueIterator(self.client_queue):
|
||||||
|
|
||||||
# 当唤醒状态被关闭时,退出循环; 当被打断时,退出循环
|
# 当唤醒状态被关闭时,退出循环
|
||||||
if not self.wakeup_event.is_set() or self.interrupt_event.is_set():
|
if not self.wakeup_event.is_set():
|
||||||
clear_queue_flag = True
|
self.listening_event.clear()
|
||||||
|
self.speaking_event.clear()
|
||||||
if clear_queue_flag:
|
|
||||||
client.close_client()
|
client.close_client()
|
||||||
break
|
break
|
||||||
|
|
||||||
|
# 播放时不得发送数据,默认废消息
|
||||||
|
if self.speaking_event.is_set() and not self.listening_event.is_set():
|
||||||
|
break
|
||||||
|
|
||||||
# 发送音频数据
|
# 发送音频数据
|
||||||
if queue_data[0] == 'audio':
|
if queue_data[0] == 'audio':
|
||||||
audio_dict = queue_data[1]
|
audio_dict = queue_data[1]
|
||||||
|
@ -345,14 +355,27 @@ class WebSocketClinet:
|
||||||
encoding='base64',
|
encoding='base64',
|
||||||
)
|
)
|
||||||
|
|
||||||
if clear_queue_flag:
|
if not self.wakeup_event.is_set():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 等待播放
|
# 切换播放模式
|
||||||
self.listening_event.clear()
|
self.listening_event.clear()
|
||||||
|
self.speaking_event.set()
|
||||||
|
|
||||||
# 接收数据
|
# 接收数据
|
||||||
while True:
|
while True:
|
||||||
|
# 当唤醒状态被关闭时,退出循环
|
||||||
|
if not self.wakeup_event.is_set():
|
||||||
|
self.listening_event.clear()
|
||||||
|
self.speaking_event.clear()
|
||||||
|
client.close_client()
|
||||||
|
break
|
||||||
|
|
||||||
|
# 当正在说话时接收到时,默认全是废消息
|
||||||
|
if self.listening_event.is_set() and not self.speaking_event.is_set():
|
||||||
|
client.close_client()
|
||||||
|
break
|
||||||
|
|
||||||
response, data_type = client.receive_per_data()
|
response, data_type = client.receive_per_data()
|
||||||
if data_type == dict:
|
if data_type == dict:
|
||||||
print(f"{datetime.now()}: receive json data: {response}") # 打印接收到的消息
|
print(f"{datetime.now()}: receive json data: {response}") # 打印接收到的消息
|
||||||
|
@ -362,9 +385,6 @@ class WebSocketClinet:
|
||||||
continue
|
continue
|
||||||
elif data_type == bytes:
|
elif data_type == bytes:
|
||||||
# 开始播放
|
# 开始播放
|
||||||
if self.listening_event.is_set():
|
|
||||||
self.speaking_event.set()
|
|
||||||
self.listening_event.clear()
|
|
||||||
print(f"{datetime.now()}: receive audio data")
|
print(f"{datetime.now()}: receive audio data")
|
||||||
self.audio_play_queue.put(('audio_bytes', response))
|
self.audio_play_queue.put(('audio_bytes', response))
|
||||||
elif data_type == None:
|
elif data_type == None:
|
||||||
|
@ -388,19 +408,17 @@ class WebSocketClinet:
|
||||||
if not self.wakeup_event.is_set():
|
if not self.wakeup_event.is_set():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 打断状态
|
audio_list.append(item[1])
|
||||||
if self.interrupt_event.is_set():
|
print(f"{datetime.now()}: start playing audio.")
|
||||||
self.listening_event.set()
|
|
||||||
self.speaking_event.clear()
|
|
||||||
|
if self.listening_event.is_set():
|
||||||
# 停止播放状态
|
continue
|
||||||
|
|
||||||
if not self.speaking_event.is_set():
|
if not self.speaking_event.is_set():
|
||||||
assert self.listening_event.is_set(), f"speaking event is not set, got wakeup_event [{self.wakeup_event.is_set()}], interrupt_event [{self.interrupt_event.is_set()}], listening_event [{self.listening_event.is_set()}]"
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 播放音频
|
# 播放音频
|
||||||
audio_list.append(item[1])
|
|
||||||
print(f"{datetime.now()}: start playing audio.")
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
tts_audio = audio_list[0] # 取出第一个音频
|
tts_audio = audio_list[0] # 取出第一个音频
|
||||||
|
@ -410,18 +428,17 @@ class WebSocketClinet:
|
||||||
print("Playing {} data...{}/{}".format(item[0], i, len(tts_audio)))
|
print("Playing {} data...{}/{}".format(item[0], i, len(tts_audio)))
|
||||||
|
|
||||||
# 按键打断播放
|
# 按键打断播放
|
||||||
if self.interrupt_event.is_set():
|
if self.listening_event.is_set() and not self.speaking_event.is_set():
|
||||||
self.listening_event.set()
|
print(f"{datetime.now()}: speaker interrupt.")
|
||||||
self.speaking_event.clear()
|
|
||||||
break
|
break
|
||||||
# 关闭状态
|
# 关闭状态
|
||||||
if not self.wakeup_event.is_set():
|
if not self.wakeup_event.is_set():
|
||||||
|
print(f"{datetime.now()}: speaker close.")
|
||||||
self.listening_event.clear()
|
self.listening_event.clear()
|
||||||
self.speaking_event.clear()
|
self.speaking_event.clear()
|
||||||
break
|
break
|
||||||
|
|
||||||
if not self.speaking_event:
|
if not self.speaking_event:
|
||||||
print(f"{datetime.now()}: speaker interrupt.")
|
|
||||||
audio_list = [] # 清空音频列表
|
audio_list = [] # 清空音频列表
|
||||||
continue
|
continue
|
||||||
# 播放最后一段音频
|
# 播放最后一段音频
|
||||||
|
|
Loading…
Reference in New Issue