33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
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
|