File size: 2,176 Bytes
df9db76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import speech_recognition as sr

class VoiceHandler:
    def __init__(self):
        self.recognizer = sr.Recognizer()
        # Adjust recognition settings for better accuracy
        self.recognizer.energy_threshold = 4000
        self.recognizer.dynamic_energy_threshold = True
        self.recognizer.pause_threshold = 0.8
    
    def listen_for_voice(self, language="mixed"):
        """
        Listen for voice input in specified language.
        language can be: 
        - "ar-SA" for Arabic
        - "en-US" for English
        - "mixed" for both Arabic and English
        """
        try:
            with sr.Microphone() as source:
                print("Adjusting for ambient noise...")
                self.recognizer.adjust_for_ambient_noise(source, duration=1)
                print("Listening...")
                audio = self.recognizer.listen(source, timeout=5, phrase_time_limit=10)
                print("Processing speech...")
                
                # Try Arabic first if mixed or Arabic is specified
                if language in ["ar-SA", "mixed"]:
                    try:
                        text = self.recognizer.recognize_google(audio, language="ar-SA")
                        return text
                    except sr.UnknownValueError:
                        if language == "mixed":
                            # If Arabic fails and mixed is specified, try English
                            text = self.recognizer.recognize_google(audio, language="en-US")
                            return text
                        raise
                else:
                    # English only
                    text = self.recognizer.recognize_google(audio, language="en-US")
                    return text
                    
        except sr.RequestError as e:
            return f"Could not request results from speech service: {str(e)}"
        except sr.UnknownValueError:
            return "Could not understand audio. Please speak clearly and try again."
        except sr.WaitTimeoutError:
            return "Listening timed out. Please try again."
        except Exception as e:
            return f"Error: {str(e)}"