|
from fastapi import FastAPI, HTTPException |
|
from pydantic import BaseModel |
|
from TTS.api import TTS |
|
import torch |
|
|
|
app = FastAPI() |
|
|
|
|
|
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2") |
|
device = "cuda" if torch.cuda.is_available() else "cpu" |
|
tts.to(device) |
|
|
|
|
|
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} |