File size: 1,514 Bytes
1e7709f c45f0d6 16153ee 9c9026a 1e7709f a71355d 9c9026a a71355d c45f0d6 9c9026a c45f0d6 16153ee c45f0d6 587fe4f 16153ee 587fe4f c45f0d6 587fe4f 1e7709f c45f0d6 1e7709f c45f0d6 587fe4f c45f0d6 9c9026a c45f0d6 9c9026a c45f0d6 9c9026a c45f0d6 9c9026a c45f0d6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import uuid
from pathlib import Path
from config import GROQ_TTS_API_KEY, GROQ_TTS_MODEL
from gtts import gTTS
def text_to_speech(
text: str,
voice: str = "en",
fmt: str = "mp3",
) -> str:
"""
Convert text to speech using gTTS (Google Translate, free).
Only MP3 is supported.
"""
if not GROQ_TTS_API_KEY:
raise RuntimeError("GROQ_TTS_API_KEY is not set in config")
if not text or not text.strip():
raise ValueError("Text cannot be empty")
url = "https://api.groq.com/openai/v1/audio/speech"
headers = {
"Authorization": f"Bearer {GROQ_TTS_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": GROQ_TTS_MODEL,
"input": text.strip(),
"voice": voice,
"response_format": fmt
}
if not text or not text.strip():
raise ValueError("Text cannot be empty")
if fmt != "mp3":
raise ValueError("Only MP3 format is supported by the free TTS backend")
try:
temp_dir = Path("temp_audio")
temp_dir.mkdir(exist_ok=True)
output_filename = f"tts_{uuid.uuid4().hex[:8]}.{fmt}"
output_path = temp_dir / output_filename
# gTTS uses language codes; voice kept for compatibility.
tts = gTTS(text=text.strip(), lang=voice or "en")
tts.save(str(output_path))
return str(output_path)
except Exception as e:
raise Exception(f"Unexpected error in text_to_speech: {str(e)}") |