test / app.py
don0726's picture
Update app.py
dcf17fd verified
import os
import tempfile
import threading
import gradio as gr
from TTS.api import TTS
os.environ["COQUI_TOS_AGREED"] = "1"
MODEL_PATH = "models/xtts"
CONFIG_PATH = "models/xtts/config.json"
VOCAB_PATH = "models/xtts/vocab.json"
SPEAKERS_PATH = "models/xtts/speakers_xtts.pth"
for p in [MODEL_PATH, CONFIG_PATH, VOCAB_PATH, SPEAKERS_PATH]:
if not os.path.exists(p):
raise RuntimeError(f"Missing file: {p}")
tts = None
model_ready = False
def load_model():
global tts, model_ready
print("🔁 Loading XTTS model once...")
tts = TTS(
model_path=MODEL_PATH,
config_path=CONFIG_PATH,
progress_bar=False,
gpu=False
)
model_ready = True
print("✅ XTTS model loaded!")
threading.Thread(target=load_model, daemon=True).start()
def tts_api(text, speaker_wav):
if not model_ready:
raise gr.Error("Model loading... wait 30 seconds")
if not text or speaker_wav is None:
raise gr.Error("Provide text and speaker audio")
out_path = os.path.join(tempfile.gettempdir(), "out.wav")
tts.tts_to_file(
text=text,
speaker_wav=speaker_wav,
language="en",
file_path=out_path
)
return out_path
demo = gr.Interface(
fn=tts_api,
inputs=[
gr.Textbox(label="Text"),
gr.Audio(type="filepath", label="Speaker WAV"),
],
outputs=gr.Audio(type="filepath"),
api_name="tts"
)
demo.queue()
demo.launch()