File size: 1,245 Bytes
c45f0d6 2da4544 27ee35f 2da4544 a71355d c45f0d6 a71355d c45f0d6 a71355d c45f0d6 a71355d c45f0d6 a71355d c45f0d6 a71355d c45f0d6 |
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 |
from fastapi import APIRouter, HTTPException
from fastapi.responses import FileResponse
from models.tts import TTSRequest
from services.tts_service import text_to_speech
from pathlib import Path
router = APIRouter(prefix="/tts", tags=["Text To Speech"])
@router.post("/")
async def generate_tts(request: TTSRequest):
"""
Convert text to speech (English only)
"""
try:
# Generate audio
audio_path = text_to_speech(
text=request.text,
voice=request.voice,
fmt=request.format
)
# Verify file exists
if not Path(audio_path).exists():
raise HTTPException(status_code=500, detail="Audio file generation failed")
# Determine MIME type
media_type = "audio/wav" if request.format == "wav" else "audio/mpeg"
# Return audio file
return FileResponse(
path=audio_path,
filename=f"speech.{request.format}",
media_type=media_type,
headers={
"Content-Disposition": f"attachment; filename=speech.{request.format}"
}
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e)) |