import os import uvicorn from sound_generator import generate_sound, generate_music from fastapi import FastAPI, HTTPException, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.templating import Jinja2Templates from fastapi.responses import FileResponse, HTMLResponse from pydantic import BaseModel # Create the FastAPI app with custom docs URL app = FastAPI( title="API de Sonidos Generativos", description="API para generar sonidos y música basados en prompts", version="1.0.0", docs_url="/docs", redoc_url="/redoc", ) # Cargar las plantillas desde la carpeta "templates" templates = Jinja2Templates(directory="templates") # Configuración de CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Define a Pydantic model to handle the input prompt class AudioRequest(BaseModel): prompt: str @app.get("/", response_class=HTMLResponse) def home(request: Request): """Página de inicio con información de la API""" return templates.TemplateResponse("home.html", {"request": request}) # Prueba para verificar si la API funciona - la dejamos por ahora para debugging @app.get("/health") def health_check(): """Endpoint para verificar que el servicio está funcionando correctamente""" return {"status": "ok", "service": "Sound Generation API"} @app.post("/generate-sound/") async def generate_sound_endpoint(request: AudioRequest): try: # Llamada a la función para generar el sonido audio_file_path = generate_sound(request.prompt) # Verifica si el archivo se ha generado correctamente if not os.path.exists(audio_file_path): raise HTTPException( status_code=404, detail="Archivo de audio no encontrado." ) # Regresar el archivo generado como una respuesta de descarga return FileResponse( audio_file_path, media_type="audio/wav", filename="generated_audio.wav" ) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/generate-music/") async def generate_music_endpoint(request: AudioRequest): try: # Call the synchronous generate_music function audio_file_path = generate_music(request.prompt) # Verifies if the file has been generated correctly if not os.path.exists(audio_file_path): raise HTTPException( status_code=404, detail="Archivo de audio no encontrado." ) # Return the generated file as a download response return FileResponse( audio_file_path, media_type="audio/wav", filename="generated_audio.wav" ) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=7860)