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