from bark import SAMPLE_RATE, generate_audio, preload_models from scipy.io.wavfile import write as write_wav import torch import os from fastapi import FastAPI, Request, Form from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates # Patch torch.load for PyTorch 2.6+ if hasattr(torch, 'serialization'): torch.serialization.add_safe_globals([ "numpy.core.multiarray.scalar" ]) # Create FastAPI app app = FastAPI() # Mount static and templates folder app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") # Preload Bark models preload_models() @app.get("/") def index(request: Request): return templates.TemplateResponse("index.html", {"request": request}) @app.post("/synthesize") def synthesize(request: Request, text: str = Form(...)): audio_array = generate_audio(text) output_path = "static/output.wav" write_wav(output_path, SAMPLE_RATE, audio_array) return FileResponse(output_path, media_type="audio/wav", filename="output.wav")