Voice-Bot-RAG / rag /tts_generator.py
Abeshith's picture
Voice BOT RAG Initial Commit
1813edc
"""
Text-to-Speech Generator - Converts bot responses to audio
Uses gTTS with professional customer support voice
"""
from gtts import gTTS
from pathlib import Path
from datetime import datetime
import json
class TTSGenerator:
"""Generates audio files for bot responses"""
def __init__(self, output_dir: str = "data/audio_output"):
"""Initialize TTS generator
Args:
output_dir: Directory to save audio files
"""
self.output_dir = Path(output_dir)
self.output_dir.mkdir(parents=True, exist_ok=True)
def generate_audio(self, text: str, customer_id: str, session_id: str) -> str:
"""
Generate audio file from text
Args:
text: Response text to convert to speech
customer_id: Customer ID for file organization
session_id: Session ID for context
Returns:
Path to generated audio file
"""
try:
# Create filename with timestamp
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"bot_response_{customer_id}_{session_id[:8]}_{timestamp}.mp3"
filepath = self.output_dir / filename
# Generate speech with gTTS
# Using slower speech rate (slow=True) for clarity
# Language: English (US) for professional tone
tts = gTTS(
text=text,
lang='en',
slow=True, # Slower speech for clarity
tld='com' # Top-level domain for better quality
)
# Save to file
tts.save(str(filepath))
print(f"[TTS] Generated audio: {filename} ({len(text)} chars)")
return str(filepath)
except Exception as e:
print(f"[TTS ERROR] Failed to generate audio: {str(e)}")
return ""
def generate_greeting(self, customer_id: str) -> str:
"""Generate audio for greeting message"""
greeting_text = "Hello! How can I help you today?"
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"greeting_{customer_id}_{timestamp}.mp3"
filepath = self.output_dir / filename
try:
tts = gTTS(
text=greeting_text,
lang='en',
slow=True,
tld='com'
)
tts.save(str(filepath))
print(f"[TTS] Generated greeting: {filename}")
return str(filepath)
except Exception as e:
print(f"[TTS ERROR] Failed to generate greeting: {str(e)}")
return ""
# Global TTS generator instance
_tts_generator = None
def get_tts_generator() -> TTSGenerator:
"""Get or create global TTS generator"""
global _tts_generator
if _tts_generator is None:
_tts_generator = TTSGenerator()
return _tts_generator