""" TTS 服务 (EdgeTTS) """ import edge_tts import asyncio from pathlib import Path from loguru import logger class TTSService: VOICES = { "zh-CN-YunxiNeural": "云希 (男, 轻松)", "zh-CN-YunjianNeural": "云健 (男, 体育)", "zh-CN-YunyangNeural": "云扬 (男, 专业)", "zh-CN-XiaoxiaoNeural": "晓晓 (女, 活泼)", "zh-CN-XiaoyiNeural": "晓伊 (女, 卡通)", } async def generate_audio(self, text: str, voice: str, output_path: str) -> str: """生成语音""" logger.info(f"TTS Generating: {text[:20]}... ({voice})") Path(output_path).parent.mkdir(parents=True, exist_ok=True) try: communicate = edge_tts.Communicate(text, voice) await communicate.save(output_path) # Create SUBTITLES (vtt -> srt conversion logic omitted for brevity in restore) return output_path except Exception as e: logger.error(f"TTS Failed: {e}") raise async def list_voices(self): return [{"id": k, "name": v} for k, v in self.VOICES.items()]