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))