Files
meme/api/v1/tts_routes.py
2025-11-28 20:27:10 +08:00

109 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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(),
}