khurrameycon's picture
Create app.py
ff704b5 verified
raw
history blame
1.33 kB
from fastapi import FastAPI, HTTPException, UploadFile, File
from fastapi.responses import FileResponse
from kokoro import KPipeline
import soundfile as sf
import os
import tempfile
app = FastAPI(title="Text-to-Speech Converter")
# Initialize pipeline once at startup
pipeline = KPipeline(lang_code='a')
@app.post("/generate_audio/")
async def generate_audio(text: str = None):
if not text:
raise HTTPException(status_code=400, detail="No text provided")
try:
# Create temporary directory
with tempfile.TemporaryDirectory() as tmpdir:
# Generate audio
generator = pipeline(
text,
voice='af_heart',
speed=1,
split_pattern=r'\n+'
)
# Process first audio segment only (modify as needed)
i, (gs, ps, audio) = next(enumerate(generator))
# Save to temporary file
output_path = f"{tmpdir}/output.wav"
sf.write(output_path, audio, 24000)
return FileResponse(
output_path,
media_type='audio/wav',
filename="generated_audio.wav"
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))