from fastapi import FastAPI, HTTPException from pydantic import BaseModel from TTS.api import TTS import torch app = FastAPI() # Initialize the TTS model tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2") device = "cuda" if torch.cuda.is_available() else "cpu" tts.to(device) # Get available voices and languages available_voices = tts.list_speakers() available_languages = tts.list_languages() class TextToSpeechRequest(BaseModel): text: str voice: str language: str @app.get("/voices") def get_voices(): return {"voices": available_voices} @app.get("/languages") def get_languages(): return {"languages": available_languages} @app.post("/generate") def generate_speech(request: TextToSpeechRequest): if request.voice not in available_voices: raise HTTPException(status_code=400, detail="Invalid voice selected") if request.language not in available_languages: raise HTTPException(status_code=400, detail="Invalid language selected") output_path = "output.wav" tts.tts_to_file(text=request.text, speaker=request.voice, language=request.language, file_path=output_path) return {"message": "Speech generated successfully", "file_path": output_path}