add edge tts

This commit is contained in:
2025-11-28 20:27:10 +08:00
parent f796a3833b
commit 87160c5265
20 changed files with 3589 additions and 3 deletions

342
tts/README.md Normal file
View File

@ -0,0 +1,342 @@
"""
TTS 模块文档
本模块提供文本转语音Text-to-Speech的统一接口支持多引擎扩展架构。
"""
# TTS 模块使用指南
## 模块结构
```
tts/
├── __init__.py # 模块入口
├── base.py # TTS 引擎基类(抽象接口)
├── edge_tts_engine.py # Edge-TTS 引擎实现
├── factory.py # TTS 引擎工厂类
├── service.py # 高级 TTS 服务接口
├── examples.py # 使用示例
└── README.md # 本文档
```
## 快速开始
### 1. 安装依赖
```bash
pip install edge-tts
```
### 2. 配置 TTS 引擎
`.env` 文件中配置:
```env
# TTS 引擎配置
TTS_ENGINE=edge-tts # 使用的 TTS 引擎
TTS_LANGUAGE=zh-CN # 默认语言
TTS_VOICE= # 默认声音(为空使用引擎默认)
TTS_RATE=1.0 # 语速1.0 为正常)
TTS_PITCH=1.0 # 音调1.0 为正常)
```
### 3. 基本使用
#### 方法一:使用高级服务(推荐)
```python
from tts.service import TTSService
import asyncio
async def main():
# 使用默认配置合成语音
audio = await TTSService.synthesize("你好,世界!")
# 自定义参数
audio = await TTSService.synthesize(
"Hello, World!",
language="en-US",
rate=1.2 # 快速
)
# 获取支持的声音
voices = await TTSService.get_supported_voices()
# 获取引擎信息
info = TTSService.get_engine_info()
asyncio.run(main())
```
#### 方法二:直接使用引擎工厂
```python
from tts.factory import TTSEngineFactory
import asyncio
async def main():
# 创建引擎实例
engine = TTSEngineFactory.create("edge-tts")
# 合成语音
audio = await engine.synthesize(
"你好,世界!",
language="zh-CN"
)
# 获取支持的声音
voices = await engine.get_supported_voices("zh-CN")
asyncio.run(main())
```
#### 方法三:直接使用引擎
```python
from tts.edge_tts_engine import EdgeTTSEngine
import asyncio
async def main():
engine = EdgeTTSEngine()
audio = await engine.synthesize(
"你好,世界!",
voice="zh-CN-XiaoxiaoNeural",
language="zh-CN"
)
asyncio.run(main())
```
## API 文档
### TTSService推荐使用
高级服务接口,自动使用配置文件中的设置。
```python
async def synthesize(
text: str,
language: Optional[str] = None,
voice: Optional[str] = None,
rate: Optional[float] = None,
pitch: Optional[float] = None,
) -> BytesIO:
"""将文本合成为语音"""
async def get_supported_voices(language: Optional[str] = None) -> list[dict]:
"""获取支持的声音列表"""
def get_engine_info() -> dict:
"""获取引擎信息"""
def reset_engine() -> None:
"""重置引擎(仅在切换引擎时需要)"""
```
### TTSEngineFactory
引擎工厂类,管理引擎的创建和生命周期。
```python
@classmethod
def create(engine_type: str | TTSEngineType) -> TTSEngine:
"""创建引擎实例(单例模式)"""
@classmethod
def register_engine(engine_type: str, engine_class: type[TTSEngine]) -> None:
"""注册新的引擎类型"""
@classmethod
def get_supported_engines() -> list[str]:
"""获取所有支持的引擎"""
```
### TTSEngine基类
所有引擎必须实现的接口。
```python
async def synthesize(
text: str,
language: str = "zh-CN",
voice: Optional[str] = None,
rate: float = 1.0,
pitch: float = 1.0,
) -> BytesIO:
"""将文本合成为语音"""
async def get_supported_voices(language: str = "zh-CN") -> list[dict]:
"""获取支持的声音"""
def get_engine_name() -> str:
"""获取引擎名称"""
def get_engine_version() -> str:
"""获取引擎版本"""
```
## 支持的语言和声音
### Edge-TTS 支持的主要语言
- **中文(简体)**: zh-CN - 晓晓 (zh-CN-XiaoxiaoNeural)
- **中文(繁体)**: zh-TW
- **英文(美国)**: en-US - Aria (en-US-AriaNeural)
- **英文(英国)**: en-GB - Sonia (en-GB-SoniaNeural)
- **日语**: ja-JP
- **韩语**: ko-KR
- **法语**: fr-FR
- **德语**: de-DE
- **西班牙语**: es-ES
- **俄语**: ru-RU
### 获取完整的声音列表
```python
from tts.service import TTSService
import asyncio
async def main():
voices = await TTSService.get_supported_voices("zh-CN")
for voice in voices:
print(f"{voice['display_name']}: {voice['name']}")
asyncio.run(main())
```
## 扩展新的 TTS 引擎
### 步骤 1创建引擎类
创建新文件 `tts/new_engine.py`
```python
from .base import TTSEngine
from typing import Optional
from io import BytesIO
class NewTTSEngine(TTSEngine):
"""新的 TTS 引擎实现"""
async def synthesize(
self,
text: str,
language: str = "zh-CN",
voice: Optional[str] = None,
rate: float = 1.0,
pitch: float = 1.0,
) -> BytesIO:
# 实现合成逻辑
pass
async def get_supported_voices(self, language: str = "zh-CN") -> list[dict]:
# 实现获取声音列表
pass
def get_engine_name(self) -> str:
return "new-engine"
def get_engine_version(self) -> str:
return "1.0.0"
```
### 步骤 2在工厂中注册
编辑 `tts/factory.py`
```python
from .new_engine import NewTTSEngine
class TTSEngineType(Enum):
EDGE_TTS = "edge-tts"
NEW_ENGINE = "new-engine" # 添加新引擎
class TTSEngineFactory:
_engines = {
TTSEngineType.EDGE_TTS: EdgeTTSEngine,
TTSEngineType.NEW_ENGINE: NewTTSEngine, # 注册引擎类
}
```
### 步骤 3更新配置
`.env` 中配置使用新引擎:
```env
TTS_ENGINE=new-engine
```
### 步骤 4使用新引擎
```python
from tts.service import TTSService
# TTSService 会自动使用配置中的引擎
audio = await TTSService.synthesize("Hello, World!")
```
## REST API 端点
### 1. 合成语音
```http
POST /api/v1/tts/synthesize
Content-Type: application/json
{
"text": "你好,世界!",
"language": "zh-CN",
"voice": null,
"rate": 1.0,
"pitch": 1.0
}
```
### 2. 获取声音列表
```http
GET /api/v1/tts/voices?language=zh-CN
```
### 3. 获取支持的引擎
```http
GET /api/v1/tts/engines
```
### 4. 获取引擎信息
```http
GET /api/v1/tts/engine-info
```
## 性能优化
1. **引擎缓存**TTSEngineFactory 使用单例模式缓存引擎实例
2. **异步处理**:所有 IO 操作都是异步的,支持高并发
3. **配置缓存**:从配置文件读取的设置只在初始化时加载一次
## 错误处理
```python
from tts.service import TTSService
try:
audio = await TTSService.synthesize("文本")
except Exception as e:
print(f"TTS 合成失败: {e}")
```
## 许可证
参考主项目许可证
## 更新日志
### v1.0.0 (初始版本)
- ✅ Edge-TTS 引擎实现
- ✅ 工厂模式支持引擎扩展
- ✅ 高级服务接口
- ✅ REST API 支持
- ✅ 多语言支持