init
This commit is contained in:
+32
@@ -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
|
||||
Reference in New Issue
Block a user