| from fastapi import FastAPI, Response, Request |
| from fastapi.middleware.cors import CORSMiddleware |
| import edge_tts |
| import uvicorn |
|
|
| app = FastAPI() |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| @app.get("/") |
| def home(): |
| return "Edge TTS Ready" |
|
|
| |
| @app.api_route("/tts", methods=["GET", "POST"]) |
| async def tts(request: Request): |
| try: |
| |
| if request.method == "GET": |
| params = request.query_params |
| text = params.get("text") |
| voice = params.get("voice", "fr-FR-VivienneMultilingualNeural") |
| else: |
| data = await request.json() |
| text = data.get("text") |
| voice = data.get("voice", "fr-FR-VivienneMultilingualNeural") |
|
|
| if not text: |
| return Response("Texte manquant", status_code=400) |
|
|
| communicate = edge_tts.Communicate(text, voice) |
| audio_data = b"" |
|
|
| async for chunk in communicate.stream(): |
| if chunk["type"] == "audio": |
| audio_data += chunk["data"] |
|
|
| return Response(content=audio_data, media_type="audio/mpeg") |
|
|
| except Exception as e: |
| return Response(content=str(e), status_code=500) |
|
|
| if __name__ == "__main__": |
| uvicorn.run(app, host="0.0.0.0", port=7860) |