import os import gradio as gr import uvicorn from sound_generator import generate_sound, generate_music from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse from pydantic import BaseModel # Create the FastAPI app app = FastAPI() # Configuración de CORS para permitir solicitudes desde cualquier origen app.add_middleware( CORSMiddleware, allow_origins=[ "*" ], # Permitir todos los orígenes (puedes restringirlo a tus orígenes específicos) allow_credentials=True, allow_methods=["*"], # Permitir todos los métodos HTTP (GET, POST, OPTIONS, etc.) allow_headers=["*"], # Permitir todos los encabezados ) # Define a Pydantic model to handle the input prompt class AudioRequest(BaseModel): prompt: str @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)) # Crear interfaz de Gradio separadamente with gr.Blocks() as demo: gr.Markdown("# API de Sonidos Generativos") gr.Markdown("Bienvenido al servicio de generación de sonidos mediante IA.") gr.Markdown( "Esta API está disponible para uso a través de los siguientes endpoints:" ) gr.Markdown("- Generar sonido: `/generate-sound/`") gr.Markdown("- Generar música: `/generate-music/`") gr.Markdown("- Documentación de la API: `/docs`") # Montar Gradio en FastAPI - IMPORTANTE: esto debe hacerse antes de iniciar el servidor app = gr.mount_gradio_app(app, demo, path="/") if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=7860)