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)