This commit is contained in:
田岩
2025-12-01 21:00:54 +08:00
parent fde86ef902
commit 67c44bc746
97 changed files with 45781 additions and 395 deletions
+34 -32
View File
@@ -66,57 +66,52 @@ async def frontend_websocket_handler(websocket: WebSocket):
# ====================== 修复 TTS 核心逻辑 ======================
# 1. 创建 TTS 客户端
# 1. 创建TTS管理器
tts_manager = TTSManager(ws_url="ws://10.10.10.202:50000/ws/tts")
# tts_manager = TTSManager(ws_url="ws://10.10.10.202:50000/ws/tts")
tts_manager = TTSManager()
# 2. 设置结果回调函数(接收完整结果)
def handle_tts_result(req_id: str, result: Dict[str, Any]):
"""处理TTS结果回调"""
print('处理TTS结果回调 ',result)
# print('处理TTS结果回调 ',result)
status = result.get("status")
if status == "completed":
audio_data = result.get("audio_data")
sample_rate = result.get("sample_rate")
if audio_data is not None and len(audio_data) > 0:
# 转换为PCM数据
pcm_data = (audio_data.astype(np.float32) * 32767).astype(np.int16)
pcm_bytes = pcm_data.tobytes()
# result_queue.put_nowait({"type": 3, "data": pcm_bytes})
result_queue.put_nowait(pcm_bytes)
print(f"插入时候队列当前大小xxx: {result_queue.qsize()}") # 排查队列是否有数据
result_queue.put_nowait(audio_data)
#
# if audio_data is not None and len(audio_data) > 0:
# # 转换为PCM数据
# pcm_data = (audio_data.astype(np.float32) * 32767).astype(np.int16)
# pcm_bytes = pcm_data.tobytes()
# # result_queue.put_nowait({"type": 3, "data": pcm_bytes})
# result_queue.put_nowait(pcm_bytes)
# print(f"插入时候队列当前大小xxx: {result_queue.qsize()}") # 排查队列是否有数据
# 保存为PCM文件
elif status == "error":
error_msg = result.get("message")
print(f"❌ TTS处理失败 [{req_id[:8]}]: {error_msg}")
# elif status == "error":
# error_msg = result.get("message")
# print(f"❌ TTS处理失败 [{req_id[:8]}]: {error_msg}")
tts_manager.set_result_callback(handle_tts_result)
# 3. 设置是否播放(可选,默认True)
tts_manager.set_playback_enabled(True) # 设置为False则不播放
tts_manager.set_playback_enabled(False) # 设置为False则不播放
# 4. 初始化连接
await tts_manager.initialize()
texts = [
"你好,这是第一个排队的TTS请求。",
"我是第二个请求,会等第一个处理完再执行。",
"第三个请求,支持流式播放和队列管理。",
"第四个请求,测试队列的自动消费功能。",
"最后一个请求,处理完成后会自动结束。"
]
req_ids = []
for i, text in enumerate(texts):
req_id = await tts_manager.synthesize(
text,
mode="预训练音色",
sft_spk="中文女",
speed=1.0
)
req_ids.append(req_id)
# texts = [
# "你好,这是第一个排队的TTS请求。你好,这是第一个排队的TTS请求。你好,这是第一个排队的TTS请好",
# "我是第二个请求,会等第一个处理完再执行。",
# "第三个请求,支持流式播放和队列管理。",
# "第四个请求,测试队列的自动消费功能。",
# "最后一个请求,处理完成后会自动结束。"
# ]
# req_ids = []
# for i, text in enumerate(texts):
# req_id = await tts_manager.synthesize(text)
# req_ids.append(req_id)
# ====================== ASR 结果回调 ======================
async def asr_result_callback(result: dict):
"""ASR 结果回调:转发前端 + 调用大模型"""
@@ -151,6 +146,13 @@ async def frontend_websocket_handler(websocket: WebSocket):
"""大模型流式回调(纯异步,无阻塞)"""
if not chunk:
return
# req_id = await tts_manager.synthesize(
# chunk,
# mode="预训练音色",
# sft_spk="中文女",
# speed=1.0
# )
req_id = await tts_manager.synthesize(chunk)
# 1. 异步插入队列(替代put_nowait,避免队列满时抛异常)
# 1. 非阻塞插入(队列满则丢弃,优先保证实时性)
# result_queue.put_nowait(chunk)