109 lines
2.5 KiB
Python
109 lines
2.5 KiB
Python
"""
|
||
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(),
|
||
}
|