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