This commit is contained in:
Your Name
2026-07-19 21:24:04 +00:00
commit 4edb1f4b87
13 changed files with 463 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
import logging
import os
import tempfile
import uuid
from gtts import gTTS
from mutagen.mp3 import MP3
from app.config import settings
logger = logging.getLogger("callsvc.tts")
def synthesize(text: str) -> tuple[str, float]:
"""Генерирует mp3 из текста через gTTS.
Возвращает (путь_к_файлу, длительность_в_секундах).
Вызывающий код отвечает за удаление файла после использования.
"""
if not text or not text.strip():
raise ValueError("text must not be empty")
path = os.path.join(tempfile.gettempdir(), f"call-{uuid.uuid4().hex}.mp3")
gTTS(text=text, lang=settings.tts_lang).save(path)
try:
duration = MP3(path).info.length
except Exception: # noqa: BLE001 - на всякий случай не роняем звонок из-за метаданных
logger.warning("Could not read mp3 duration for %s, defaulting to 30s", path)
duration = 30.0
return path, duration