Genie-TTS-testing / genie_tts /GUI /ServerManager.py
antigravity
sync all fixes: prompt leakage, cross-lang, ref_cache update, and file wait logic
c441d2c
from PySide6.QtCore import Signal, QThread
from ..Utils.Shared import context
from ..Internal import load_character, set_reference_audio
from ..Core.Inference import tts_client
from ..ModelManager import model_manager
class InferenceWorker(QThread):
"""执行推理任务的 Worker"""
finished = Signal(bool, str, object) # success, message, data
def __init__(self, request_data: dict, mode: str):
super().__init__()
self.req: dict = request_data
self.mode: str = mode
def run(self) -> None:
try:
if self.mode == 'load_character':
load_character(
character_name=self.req['character_name'],
onnx_model_dir=self.req['onnx_model_dir'],
language=self.req['language'],
)
self.finished.emit(True, "导入角色完成", None)
elif self.mode == 'set_reference_audio':
set_reference_audio(
character_name=self.req['character_name'],
audio_path=self.req['audio_path'],
audio_text=self.req['audio_text'],
language=self.req['language'],
)
self.finished.emit(True, "设置参考音频完成", None)
elif self.mode == 'tts':
gsv_model = model_manager.get(self.req['character_name'])
tts_client.stop_event.clear()
audio_chunk = tts_client.tts(
text=self.req['text'],
prompt_audio=context.current_prompt_audio,
encoder=gsv_model.T2S_ENCODER,
first_stage_decoder=gsv_model.T2S_FIRST_STAGE_DECODER,
stage_decoder=gsv_model.T2S_STAGE_DECODER,
vocoder=gsv_model.VITS,
prompt_encoder=gsv_model.PROMPT_ENCODER,
language=gsv_model.LANGUAGE,
)
audio_chunk = audio_chunk.squeeze()
try:
return_data = {
"sample_rate": 32000,
"audio_list": [audio_chunk],
}
self.finished.emit(True, "推理完成", return_data)
except Exception as e:
self.finished.emit(False, f"数据解析失败: {e}", None)
except Exception as e:
self.finished.emit(False, f"请求异常: {str(e)}", None)