feat: 完成ChatTTS集成,连接192.168.2.5:12002

This commit is contained in:
2026-04-22 16:22:48 +08:00
parent e00b0218a0
commit 2208a1a7d4
6 changed files with 51 additions and 13 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -108,32 +108,70 @@ class EdgeTTSProvider(TTSProvider):
class ChatTTSProvider(TTSProvider):
"""ChatTTS 提供者(本地部署,预留接口"""
"""ChatTTS 提供者(本地部署)"""
# 预留配置
CHATTTS_URL = os.getenv("CHATTTS_URL", "http://localhost:19020")
# ChatTTS 服务地址
CHATTTS_URL = os.getenv("CHATTTS_URL", "http://192.168.2.5:12002")
def __init__(self):
self._available = False # 暂不可用
self._available = None
async def synthesize(self, text: str) -> Tuple[str, str]:
"""
使用 ChatTTS 合成语音
TODO: 后续实现
"""
raise NotImplementedError("ChatTTS 尚未实现,请先部署 ChatTTS 服务")
"""使用 ChatTTS 合成语音"""
import aiohttp
async with aiohttp.ClientSession() as session:
form = aiohttp.FormData()
form.add_field('text', text)
async with session.post(
f"{self.CHATTTS_URL}/synthesize",
data=form,
timeout=aiohttp.ClientTimeout(total=60)
) as resp:
if resp.status != 200:
error = await resp.text()
raise Exception(f"ChatTTS error: {error}")
data = await resp.json()
# ChatTTS 返回的 URL 是相对路径,需要拼接
audio_url = f"{self.CHATTTS_URL}{data['audio_url']}"
return None, audio_url
def get_name(self) -> str:
return "ChatTTS"
def is_available(self) -> bool:
"""检查 ChatTTS 是否可用"""
# TODO: 后续实现检测逻辑
if self._available is None:
try:
import aiohttp
import asyncio
async def check():
try:
async with aiohttp.ClientSession() as session:
async with session.get(
f"{self.CHATTTS_URL}/health",
timeout=aiohttp.ClientTimeout(total=5)
) as resp:
if resp.status == 200:
data = await resp.json()
return data.get("status") == "ok"
except:
pass
return False
self._available = asyncio.get_event_loop().run_until_complete(check())
except Exception as e:
logger.warning(f"ChatTTS check failed: {e}")
self._available = False
return self._available
def set_available(self, available: bool):
"""设置可用状态(部署后调用)"""
self._available = available
def set_url(self, url: str):
"""设置服务地址"""
self.CHATTTS_URL = url
self._available = None # 重新检测
class NoTTSProvider(TTSProvider):