tts / main.py
xiwei987's picture
Upload 2 files
30479ab verified
import asyncio
import edge_tts
from fastapi import FastAPI, Query, HTTPException
from fastapi.responses import StreamingResponse
import io
app = FastAPI()
# 支持的中文常用声音列表
# zh-CN-XiaoxiaoNeural (晓晓: 亲切、自然)
# zh-CN-YunxiNeural (云希: 阳光、少年)
# zh-CN-YunjianNeural (云健: 沉稳、解说)
@app.get("/tts")
async def tts_endpoint(
text: str = Query(..., description="要转换的文字"),
voice: str = Query("zh-CN-XiaoxiaoNeural", description="声音名称")
):
try:
# 初始化 edge-tts
communicate = edge_tts.Communicate(text, voice)
# 将音频流写入内存流中
audio_stream = io.BytesIO()
async for chunk in communicate.stream():
if chunk["type"] == "audio":
audio_stream.write(chunk["data"])
audio_stream.seek(0)
# 返回 MP3 数据流
return StreamingResponse(audio_stream, media_type="audio/mpeg")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)