# TTS 模块架构设计文档 ## 📐 整体架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ 应用层 (API) │ │ ┌──────────────────┐ ┌──────────────────┐ ┌───────────┐ │ │ │ FastAPI 路由 │ │ 定时任务 │ │ 服务层 │ │ │ │ (tts_routes.py) │ │ (scheduler) │ │ (services)│ │ │ └──────────────────┘ └──────────────────┘ └───────────┘ │ └──────────────────────────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ 高级服务层 (Service) │ │ ┌─────────────────────────────────────┐ │ │ │ TTSService │ │ │ │ - synthesize() │ │ │ │ - get_supported_voices() │ │ │ │ - get_engine_info() │ │ │ │ - 自动使用配置文件设置 │ │ │ └─────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ 工厂层 (Factory) │ │ ┌─────────────────────────────────────┐ │ │ │ TTSEngineFactory │ │ │ │ - create() (创建引擎) │ │ │ │ - register_engine() (注册引擎) │ │ │ │ - 单例模式缓存引擎实例 │ │ │ └─────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ 抽象层 (Abstract Base) │ │ ┌─────────────────────────────────────┐ │ │ │ TTSEngine │ │ │ │ - synthesize() │ │ │ │ - get_supported_voices() │ │ │ │ - get_engine_name() │ │ │ │ - get_engine_version() │ │ │ └─────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ 具体实现层 (Implementations) │ │ ┌──────────────────┐ ┌──────────────────┐ ┌───────────┐ │ │ │ EdgeTTSEngine │ │ GoogleTTSEngine │ │ ... │ │ │ │ (现有) │ │ (待实现) │ │ (扩展) │ │ │ └──────────────────┘ └──────────────────┘ └───────────┘ │ └──────────────────────────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ 第三方 TTS 服务 │ │ ┌──────────────────┐ ┌──────────────────┐ ┌───────────┐ │ │ │ Edge TTS │ │ Google TTS │ │ ... │ │ │ │ (Microsoft) │ │ (Google Cloud) │ │ (其他) │ │ │ └──────────────────┘ └──────────────────┘ └───────────┘ │ └──────────────────────────────────────────────────────────────┘ ``` ## 🏗️ 类关系图 ``` ┌──────────────────┐ │ TTSEngine │ │ (ABC) │ └──────────────────┘ ▲ │ inherits │ ┌───────────────────┼───────────────────┐ │ │ │ ┌─────────────────┐ ┌──────────────┐ ┌──────────────┐ │ EdgeTTSEngine │ │GoogleTTSEngine│ │... │ │ (已实现) │ │(待实现) │ │(扩展) │ └─────────────────┘ └──────────────┘ └──────────────┘ ┌─────────────────────────────────┐ │ TTSEngineFactory │ │ manages instances of ▲ │ │ │ │ │ - create() │ │ │ - register_engine() │ │ │ - _instances cache │ │ └─────────────────────────────────┘ ┌─────────────────────────────────┐ │ TTSService │ │ uses ▼ │ │ │ │ - TTSEngineFactory │ │ - Settings (config) │ │ - Logger │ └─────────────────────────────────┘ ``` ## 🔄 执行流程 ### 1. 初始化流程 ``` 应用启动 │ ├─→ 加载配置 (settings.py) │ │ │ └─→ TTS_ENGINE="edge-tts" │ TTS_LANGUAGE="zh-CN" │ ... │ └─→ 应用就绪 │ └─→ 第一次 TTS 请求到达时初始化引擎 ``` ### 2. 合成语音流程 ``` 用户请求 (HTTP POST) │ ├─→ TTSService.synthesize() │ │ │ ├─→ 检查引擎是否已初始化 │ │ │ │ │ └─→ 否: TTSEngineFactory.create() │ │ │ │ │ └─→ 创建 EdgeTTSEngine 实例 │ │ └─→ 缓存实例 │ │ │ ├─→ 从配置获取参数 │ │ (language, voice, rate, pitch) │ │ │ ├─→ engine.synthesize() │ │ │ │ │ └─→ Edge TTS API 调用 │ │ │ │ │ └─→ 返回 BytesIO 对象 │ │ │ └─→ 返回音频数据 │ └─→ API 响应成功 ``` ### 3. 获取声音列表流程 ``` 用户请求 (HTTP GET) │ ├─→ TTSService.get_supported_voices() │ │ │ ├─→ 获取或创建引擎实例 │ │ │ ├─→ engine.get_supported_voices() │ │ │ │ │ └─→ Edge TTS API 调用 │ │ │ │ │ └─→ 获取完整声音列表 │ │ │ │ │ └─→ 按语言筛选 │ │ │ └─→ 返回声音列表 │ └─→ API 响应成功 ``` ## 🎯 设计模式 ### 1. 工厂模式 (Factory Pattern) **目的**:统一创建和管理引擎实例 **实现**:`TTSEngineFactory` ```python # 使用工厂创建引擎 engine = TTSEngineFactory.create("edge-tts") # 自动缓存,再次创建返回同一实例 engine2 = TTSEngineFactory.create("edge-tts") assert engine is engine2 # True (单例) ``` **优点**: - 统一的创建入口 - 易于添加新引擎 - 自动实例缓存和生命周期管理 ### 2. 抽象基类模式 (ABC Pattern) **目的**:定义引擎的统一接口 **实现**:`TTSEngine` 基类 ```python from abc import ABC, abstractmethod class TTSEngine(ABC): @abstractmethod async def synthesize(self, ...): pass ``` **优点**: - 强制所有引擎实现相同接口 - IDE 自动补全和类型检查 - 清晰的契约定义 ### 3. 服务外观模式 (Facade Pattern) **目的**:为客户端提供简化的高级接口 **实现**:`TTSService` ```python # 简化的调用 audio = await TTSService.synthesize("文本") # vs 复杂的调用 engine = TTSEngineFactory.create(settings.TTS_ENGINE) audio = await engine.synthesize( text="文本", language=settings.TTS_LANGUAGE, voice=settings.TTS_VOICE or None, rate=settings.TTS_RATE, pitch=settings.TTS_PITCH, ) ``` **优点**: - 隐藏复杂性 - 统一配置管理 - 易于使用 ### 4. 单例模式 (Singleton Pattern) **目的**:确保同一引擎类型只有一个实例 **实现**:`TTSEngineFactory._instances` ```python _instances: dict[TTSEngineType, TTSEngine] = {} # 第一次创建 engine1 = TTSEngineFactory.create("edge-tts") # 创建新实例 # 第二次创建 engine2 = TTSEngineFactory.create("edge-tts") # 返回缓存实例 assert engine1 is engine2 # True ``` **优点**: - 节省资源 - 避免重复初始化 - 状态管理简化 ## 📦 模块职责 | 模块 | 职责 | 关键类/函数 | |------|------|-----------| | `base.py` | 定义引擎接口 | `TTSEngine` | | `edge_tts_engine.py` | 实现 Edge-TTS | `EdgeTTSEngine` | | `factory.py` | 管理引擎创建 | `TTSEngineFactory`, `TTSEngineType` | | `service.py` | 提供高级接口 | `TTSService` | | `tts_routes.py` | REST API 端点 | 4 个 API 端点 | ## 🔌 扩展点 ### 新增引擎支持 1. **创建新引擎类** (步骤 1) ```python # tts/google_tts_engine.py class GoogleTTSEngine(TTSEngine): async def synthesize(self, ...): # 实现 Google TTS 调用 pass ``` 2. **注册到工厂** (步骤 2) ```python # factory.py class TTSEngineType(Enum): EDGE_TTS = "edge-tts" GOOGLE_TTS = "google-tts" # 新增 class TTSEngineFactory: _engines = { TTSEngineType.EDGE_TTS: EdgeTTSEngine, TTSEngineType.GOOGLE_TTS: GoogleTTSEngine, # 新增 } ``` 3. **更新配置** (步骤 3) ```python # settings.py TTS_ENGINE: str = Field("edge-tts") # 支持 google-tts GOOGLE_TTS_API_KEY: str # 新增 Google TTS 配置 ``` 4. **在 .env 中配置** (步骤 4) ```env TTS_ENGINE=google-tts GOOGLE_TTS_API_KEY=your_api_key ``` 完成!系统会自动使用新引擎。 ## 🧵 异步设计 所有 TTS 操作都是异步的: ```python # 高效的并发处理 async def synthesize_multiple(texts: list[str]): """并发合成多个文本""" tasks = [TTSService.synthesize(text) for text in texts] audios = await asyncio.gather(*tasks) return audios ``` **好处**: - 支持高并发请求 - 不阻塞其他操作 - 与 FastAPI/APScheduler 无缝集成 ## 💾 状态管理 ### 应用级状态 ```python class TTSService: _engine: Optional[TTSEngine] = None # 共享引擎实例 _instances: dict = {} # 引擎实例缓存 ``` **特点**: - 懒加载:第一次使用时初始化 - 线程安全:使用装饰器 `@classmethod` - 可重置:`TTSService.reset_engine()` ## ⚙️ 配置管理 ``` ┌─────────────────────────────────┐ │ .env 文件 │ │ TTS_ENGINE=edge-tts │ │ TTS_LANGUAGE=zh-CN │ │ TTS_RATE=1.0 │ └──────────────┬──────────────────┘ │ ▼ ┌─────────────────────────────────┐ │ Settings 对象 │ │ (config/settings.py) │ │ - 验证配置值 │ │ - 提供类型提示 │ │ - 支持环境变量覆盖 │ └──────────────┬──────────────────┘ │ ▼ ┌─────────────────────────────────┐ │ TTSService │ │ - 自动使用配置 │ │ - 可被参数覆盖 │ └─────────────────────────────────┘ ``` ## 🚦 错误处理 ### 错误处理流程 ``` try: audio = await engine.synthesize(text) except Exception as e: logger.error(f"TTS Error: {e}") │ ├─→ 网络错误 │ └─→ 重试或返回错误信息 │ ├─→ 不支持的语言 │ └─→ 返回支持的语言列表 │ ├─→ API 限制 │ └─→ 实现本地缓存或队列 │ └─→ 其他错误 └─→ 记录详细日志并返回 500 ``` ### 日志级别 - **DEBUG**: 详细的执行过程 - **INFO**: 成功的操作 - **ERROR**: 错误和异常 ## 📊 性能考虑 ### 优化策略 1. **实例缓存** ```python # 引擎实例只创建一次 engine = TTSEngineFactory.create("edge-tts") engine = TTSEngineFactory.create("edge-tts") # 返回缓存 ``` 2. **异步操作** ```python # 不阻塞其他请求 audio = await engine.synthesize(text) ``` 3. **结果缓存(可选)** ```python # 缓存常见文本的合成结果 @functools.lru_cache async def synthesize(text: str): ... ``` 4. **批量处理(可选)** ```python # 合成多个文本时并发处理 audios = await asyncio.gather(*tasks) ``` ## 🔐 安全考虑 1. **输入验证** - 验证文本长度 - 检查不支持的字符 2. **速率限制** - 限制每秒请求数 - 实现请求队列 3. **日志安全** - 不记录敏感信息 - 限制日志输出大小 4. **API 密钥管理** - 存储在环境变量中 - 不在代码中硬编码 ## 📚 相关文件 - `tts/README.md` - 完整的 API 文档 - `TTS_QUICK_START.md` - 快速开始指南 - `TTS_IMPLEMENTATION_SUMMARY.md` - 实现总结 - `TTS_INTEGRATION_CHECKLIST.md` - 集成检查清单 --- **版本**: 1.0.0 **最后更新**: 2025-11-27 **作者**: AI Assistant