|
|
|
@ -321,50 +321,63 @@ class TTSWsHandler:
|
|
|
|
|
await ws.send(request)
|
|
|
|
|
logging.info("send a message to the server")
|
|
|
|
|
|
|
|
|
|
# Process the received response
|
|
|
|
|
# 4. Process the received response
|
|
|
|
|
message = await ws.recv()
|
|
|
|
|
first_response = time.time() - st
|
|
|
|
|
message = json.loads(message)
|
|
|
|
|
status = message["status"]
|
|
|
|
|
while True:
|
|
|
|
|
# When throw an exception
|
|
|
|
|
if status == -1:
|
|
|
|
|
# send end request
|
|
|
|
|
end_request = json.dumps({
|
|
|
|
|
"task": "tts",
|
|
|
|
|
"signal": "end",
|
|
|
|
|
"session": session
|
|
|
|
|
})
|
|
|
|
|
await ws.send(end_request)
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
while (status == 1):
|
|
|
|
|
receive_time_list.append(time.time())
|
|
|
|
|
audio = message["audio"]
|
|
|
|
|
audio = base64.b64decode(audio) # bytes
|
|
|
|
|
chunk_duration_list.append(len(audio) / 2.0 / 24000)
|
|
|
|
|
all_bytes += audio
|
|
|
|
|
if self.play:
|
|
|
|
|
self.mutex.acquire()
|
|
|
|
|
self.buffer += audio
|
|
|
|
|
self.mutex.release()
|
|
|
|
|
if self.start_play:
|
|
|
|
|
self.t.start()
|
|
|
|
|
self.start_play = False
|
|
|
|
|
|
|
|
|
|
message = await ws.recv()
|
|
|
|
|
message = json.loads(message)
|
|
|
|
|
status = message["status"]
|
|
|
|
|
|
|
|
|
|
# 4. Last packet, no audio information
|
|
|
|
|
if status == 2:
|
|
|
|
|
final_response = time.time() - st
|
|
|
|
|
duration = len(all_bytes) / 2.0 / 24000
|
|
|
|
|
|
|
|
|
|
if output is not None:
|
|
|
|
|
save_audio_success = save_audio(all_bytes, output)
|
|
|
|
|
else:
|
|
|
|
|
save_audio_success = False
|
|
|
|
|
# Rerutn last packet normally, no audio information
|
|
|
|
|
elif status == 2:
|
|
|
|
|
final_response = time.time() - st
|
|
|
|
|
duration = len(all_bytes) / 2.0 / 24000
|
|
|
|
|
|
|
|
|
|
if output is not None:
|
|
|
|
|
save_audio_success = save_audio(all_bytes, output)
|
|
|
|
|
else:
|
|
|
|
|
save_audio_success = False
|
|
|
|
|
|
|
|
|
|
# send end request
|
|
|
|
|
end_request = json.dumps({
|
|
|
|
|
"task": "tts",
|
|
|
|
|
"signal": "end",
|
|
|
|
|
"session": session
|
|
|
|
|
})
|
|
|
|
|
await ws.send(end_request)
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
# 5. send end request
|
|
|
|
|
end_request = json.dumps({
|
|
|
|
|
"task": "tts",
|
|
|
|
|
"signal": "end",
|
|
|
|
|
"session": session
|
|
|
|
|
})
|
|
|
|
|
await ws.send(end_request)
|
|
|
|
|
# Return the audio stream normally
|
|
|
|
|
elif status == 1:
|
|
|
|
|
receive_time_list.append(time.time())
|
|
|
|
|
audio = message["audio"]
|
|
|
|
|
audio = base64.b64decode(audio) # bytes
|
|
|
|
|
chunk_duration_list.append(len(audio) / 2.0 / 24000)
|
|
|
|
|
all_bytes += audio
|
|
|
|
|
if self.play:
|
|
|
|
|
self.mutex.acquire()
|
|
|
|
|
self.buffer += audio
|
|
|
|
|
self.mutex.release()
|
|
|
|
|
if self.start_play:
|
|
|
|
|
self.t.start()
|
|
|
|
|
self.start_play = False
|
|
|
|
|
|
|
|
|
|
message = await ws.recv()
|
|
|
|
|
message = json.loads(message)
|
|
|
|
|
status = message["status"]
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
logger.error("infer error")
|
|
|
|
|
else:
|
|
|
|
|
logger.error("infer error, return status is invalid.")
|
|
|
|
|
|
|
|
|
|
if self.play:
|
|
|
|
|
self.t.join()
|
|
|
|
|