File size: 2,991 Bytes
1813edc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"""
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