add edge tts

This commit is contained in:
2025-11-28 20:27:10 +08:00
parent f796a3833b
commit 87160c5265
20 changed files with 3589 additions and 3 deletions

108
api/v1/tts_routes.py Normal file
View File

@ -0,0 +1,108 @@
"""
TTS API 路由示例
提供 REST API 接口调用 TTS 服务。
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import Optional
from tts.service import TTSService
from tts.factory import TTSEngineFactory
from utils.logger import logger
router = APIRouter(prefix="/api/v1/tts", tags=["TTS"])
class TTSSynthesizeRequest(BaseModel):
"""TTS 合成请求模型"""
text: str
language: Optional[str] = None
voice: Optional[str] = None
rate: Optional[float] = None
pitch: Optional[float] = None
@router.post("/synthesize")
async def synthesize(request: TTSSynthesizeRequest):
"""
将文本合成为语音
Args:
request: 合成请求
Returns:
合成后的音频文件MP3 格式)
"""
try:
logger.info(f"Received TTS synthesis request: {request.text[:50]}...")
audio_data = await TTSService.synthesize(
text=request.text,
language=request.language,
voice=request.voice,
rate=request.rate,
pitch=request.pitch,
)
return {
"status": "success",
"message": "Text synthesized successfully",
"audio_size": len(audio_data.getvalue()),
}
except Exception as e:
logger.error(f"Error synthesizing text: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/voices")
async def get_voices(language: Optional[str] = None):
"""
获取支持的声音列表
Args:
language: 语言代码,为空则使用默认语言
Returns:
支持的声音列表
"""
try:
voices = await TTSService.get_supported_voices(language)
return {
"status": "success",
"language": language or "default",
"voices": voices,
}
except Exception as e:
logger.error(f"Error fetching voices: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/engines")
def get_engines():
"""
获取所有支持的 TTS 引擎
Returns:
支持的引擎列表
"""
return {
"status": "success",
"engines": TTSEngineFactory.get_supported_engines(),
}
@router.get("/engine-info")
def get_engine_info():
"""
获取当前 TTS 引擎信息
Returns:
当前引擎的详细信息
"""
return {
"status": "success",
"engine_info": TTSService.get_engine_info(),
}