Spaces:
Sleeping
Sleeping
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)}" |