Spaces:
Runtime error
Runtime error
File size: 1,222 Bytes
cd4a891 c38128a f1a1694 679d5e9 c38128a f1a1694 c38128a 679d5e9 9468636 679d5e9 f1a1694 f707d78 ad68369 1b5d43e 679d5e9 f1a1694 679d5e9 f1a1694 d83cacb 679d5e9 f1a1694 1b5d43e f707d78 1b5d43e f1a1694 b25b259 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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) |