factory-tts / app.py
Calvin
change importexit
679d5e9
Raw
History Blame Contribute Delete
1.22 kB
from fastapi import FastAPI
from fastapi.responses import FileResponse
import aiofiles
import os
from TTS.api import TTS # install via: pip install TTS
import uvicorn
app = FastAPI()
# Load the Tacotron2 + HiFi-GAN Indonesian model (from Coqui TTS hub)
# Model ID on HF: "tts_models/id/id_tts_tacotron2"
tts = TTS(model_name="tts_models/id/id_tts_tacotron2")
OUTPUT_FILE = "output.wav"
@app.post("/tts")
async def tts_api(payload: dict):
text = payload.get("text", "").strip()
if not text:
return {"error": "Text is required"}
# Generate speech and save to OUTPUT_FILE
tts.tts_to_file(text=text, file_path=OUTPUT_FILE)
async with aiofiles.open(OUTPUT_FILE, "rb") as f:
audio_data = await f.read()
return {
"text": text,
"file_url": f"/download/{os.path.basename(OUTPUT_FILE)}",
"size": len(audio_data),
}
@app.get("/download/{filename}")
async def download_file(filename: str):
fp = os.path.join(os.getcwd(), filename)
if os.path.exists(fp):
return FileResponse(fp, media_type="audio/wav", filename=filename)
return {"error": "File not found"}
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=7860)