x
This commit is contained in:
+34
-32
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user