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