""" Genie TTS API 主应用 整合所有模块,提供完整的API服务 """ import asyncio import logging from datetime import datetime from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware # 导入本地模块 from tts_engine import GenieTTSInterface from voice_cloning import VoiceCloner from api_routes import ( basic_router, tts_router, voice_clone_router, character_router, set_engines ) from models import create_error_response logger = logging.getLogger(__name__) # 创建FastAPI应用 api_app = FastAPI( title="Genie TTS API", description=""" # 🎵 Genie TTS API 高质量日语文本转语音API服务,基于 GPT-SoVITS V2 架构 ## ✨ 主要功能 - **🎯 文本转语音**: 使用预训练角色进行语音合成 - **🎭 语音克隆**: 基于参考音频快速克隆声音 - **📊 音频分析**: 分析音频质量和特征 - **🔄 批量处理**: 支持批量文本转语音 ## 🌟 特色 - 零样本语音合成 - 轻量级ONNX推理 - CPU友好设计 - 支持日语语音合成 ## 📚 使用指南 1. 查看 `/health` 确认服务状态 2. 使用 `/tts/synthesize` 进行基础语音合成 3. 通过 `/voice-clone/create` 创建个性化声音 4. 使用 `/voice-clone/synthesize` 进行克隆声音合成 """, version="1.0.0", docs_url="/docs", redoc_url="/redoc" ) # 添加CORS中间件 api_app.add_middleware( CORSMiddleware, allow_origins=["*"], # 生产环境中应该限制具体域名 allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 全局引擎实例 tts_engine = None voice_cloner = None @api_app.on_event("startup") async def startup_event(): """应用启动时初始化所有服务""" global tts_engine, voice_cloner logger.info("🚀 正在初始化Genie TTS API服务...") try: # 1. 初始化TTS引擎 logger.info("📝 初始化TTS引擎...") tts_engine = GenieTTSInterface() await asyncio.get_event_loop().run_in_executor(None, tts_engine.initialize_engine) # 2. 初始化语音克隆器 logger.info("🎭 初始化语音克隆器...") voice_cloner = VoiceCloner(tts_engine) # 3. 设置路由引擎 set_engines(tts_engine, voice_cloner) logger.info("✅ Genie TTS API服务初始化成功") logger.info("🌐 API文档地址: /docs") logger.info("📖 ReDoc文档地址: /redoc") except Exception as e: logger.error(f"❌ 初始化失败: {e}") tts_engine = None voice_cloner = None @api_app.on_event("shutdown") async def shutdown_event(): """应用关闭时清理资源""" global tts_engine, voice_cloner logger.info("🧹 正在清理资源...") try: # 这里可以添加清理逻辑 # 例如:关闭数据库连接,清理临时文件等 logger.info("✅ 资源清理完成") except Exception as e: logger.error(f"❌ 资源清理失败: {e}") # 注册所有路由 api_app.include_router(basic_router) api_app.include_router(tts_router) api_app.include_router(voice_clone_router) api_app.include_router(character_router) # 全局异常处理器 @api_app.exception_handler(HTTPException) async def http_exception_handler(request, exc): """HTTP异常处理器""" return create_error_response(exc.detail, exc.status_code) @api_app.exception_handler(Exception) async def general_exception_handler(request, exc): """通用异常处理器""" logger.error(f"未处理的异常: {exc}") return create_error_response("内部服务器错误", 500) def create_api_interface(): """创建API接口,用于与Gradio应用集成""" return api_app if __name__ == "__main__": # 直接运行API服务(仅用于开发测试) import uvicorn logger.info("🔧 开发模式启动") uvicorn.run( api_app, host="0.0.0.0", port=8000, log_level="info", reload=True )