add edge tts
This commit is contained in:
119
tts/service.py
Normal file
119
tts/service.py
Normal file
@ -0,0 +1,119 @@
|
||||
"""
|
||||
TTS 服务集成模块
|
||||
|
||||
提供高层 TTS 服务接口,直接使用配置文件中的 TTS 设置。
|
||||
"""
|
||||
|
||||
from io import BytesIO
|
||||
from typing import Optional
|
||||
from config.settings import settings
|
||||
from tts.factory import TTSEngineFactory
|
||||
from tts.base import TTSEngine
|
||||
from utils.logger import logger
|
||||
|
||||
|
||||
class TTSService:
|
||||
"""
|
||||
TTS 服务
|
||||
|
||||
提供统一的 TTS 调用接口,自动使用配置文件中的引擎和参数。
|
||||
"""
|
||||
|
||||
_engine: Optional[TTSEngine] = None
|
||||
|
||||
@classmethod
|
||||
def _get_engine(cls) -> TTSEngine:
|
||||
"""
|
||||
获取 TTS 引擎实例
|
||||
|
||||
Returns:
|
||||
TTSEngine 实例
|
||||
"""
|
||||
if cls._engine is None:
|
||||
cls._engine = TTSEngineFactory.create(settings.TTS_ENGINE)
|
||||
logger.info(
|
||||
f"TTS Service initialized with engine: {settings.TTS_ENGINE}"
|
||||
)
|
||||
return cls._engine
|
||||
|
||||
@classmethod
|
||||
async def synthesize(
|
||||
cls,
|
||||
text: str,
|
||||
language: Optional[str] = None,
|
||||
voice: Optional[str] = None,
|
||||
rate: Optional[float] = None,
|
||||
pitch: Optional[float] = None,
|
||||
) -> BytesIO:
|
||||
"""
|
||||
将文本合成为语音
|
||||
|
||||
Args:
|
||||
text: 要合成的文本
|
||||
language: 语言代码,默认使用配置文件中的 TTS_LANGUAGE
|
||||
voice: 声音 ID,默认使用配置文件中的 TTS_VOICE
|
||||
rate: 语速,默认使用配置文件中的 TTS_RATE
|
||||
pitch: 音调,默认使用配置文件中的 TTS_PITCH
|
||||
|
||||
Returns:
|
||||
BytesIO 对象,包含合成后的音频数据
|
||||
"""
|
||||
engine = cls._get_engine()
|
||||
|
||||
# 使用配置文件中的默认值
|
||||
language = language or settings.TTS_LANGUAGE
|
||||
voice = voice or settings.TTS_VOICE or None
|
||||
rate = rate or settings.TTS_RATE
|
||||
pitch = pitch or settings.TTS_PITCH
|
||||
|
||||
logger.debug(f"Synthesizing text with TTS Service: {text[:50]}...")
|
||||
|
||||
return await engine.synthesize(
|
||||
text=text,
|
||||
language=language,
|
||||
voice=voice,
|
||||
rate=rate,
|
||||
pitch=pitch,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def get_supported_voices(cls, language: Optional[str] = None) -> list[dict]:
|
||||
"""
|
||||
获取支持的声音列表
|
||||
|
||||
Args:
|
||||
language: 语言代码,默认使用配置文件中的 TTS_LANGUAGE
|
||||
|
||||
Returns:
|
||||
声音列表
|
||||
"""
|
||||
engine = cls._get_engine()
|
||||
language = language or settings.TTS_LANGUAGE
|
||||
return await engine.get_supported_voices(language)
|
||||
|
||||
@classmethod
|
||||
def get_engine_info(cls) -> dict:
|
||||
"""
|
||||
获取当前 TTS 引擎信息
|
||||
|
||||
Returns:
|
||||
包含引擎名称、版本、当前配置等信息的字典
|
||||
"""
|
||||
engine = cls._get_engine()
|
||||
return {
|
||||
"engine_name": engine.get_engine_name(),
|
||||
"engine_version": engine.get_engine_version(),
|
||||
"config": {
|
||||
"language": settings.TTS_LANGUAGE,
|
||||
"voice": settings.TTS_VOICE or "default",
|
||||
"rate": settings.TTS_RATE,
|
||||
"pitch": settings.TTS_PITCH,
|
||||
},
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def reset_engine(cls) -> None:
|
||||
"""重置 TTS 引擎实例(仅在切换引擎时需要调用)"""
|
||||
cls._engine = None
|
||||
TTSEngineFactory.clear_instances()
|
||||
logger.info("TTS Service engine reset")
|
||||
Reference in New Issue
Block a user