Spaces:
Sleeping
Sleeping
File size: 2,923 Bytes
df9db76 07730d1 cf292fb d93bc11 c8b7640 201991a d93bc11 c8b7640 795e681 c8b7640 129d88f f896422 201991a 129d88f 201991a c8b7640 795e681 c8b7640 201991a c8b7640 129d88f 201991a c8b7640 df9db76 795e681 c8b7640 f896422 df9db76 c8b7640 df9db76 c8b7640 df9db76 c8b7640 795e681 df9db76 201991a df9db76 f896422 df9db76 c8b7640 201991a f896422 df9db76 c8b7640 795e681 129d88f |
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 |
import speech_recognition as sr
class VoiceHandler:
def __init__(self):
self.recognizer = sr.Recognizer()
self.recognizer.energy_threshold = 4000
self.recognizer.dynamic_energy_threshold = True
self.recognizer.pause_threshold = 0.8
self.permission_granted = False
def check_microphone_access(self) -> bool:
"""Check if microphone is accessible."""
try:
with sr.Microphone() as source:
self.recognizer.adjust_for_ambient_noise(source, duration=0.1)
return True
except OSError as e:
print("OSError: Microphone not accessible. Please check your microphone connection and ALSA configuration.")
print(f"Details: {str(e)}")
return False
except Exception as e:
print(f"Unexpected error while accessing microphone: {str(e)}")
return False
def request_permissions(self) -> bool:
"""Request microphone permissions."""
try:
if self.check_microphone_access():
self.permission_granted = True
return True
return False
except Exception as e:
print(f"Error requesting permissions: {str(e)}")
return False
def listen_for_voice(self, language: str = "mixed") -> str:
if not self.permission_granted and not self.request_permissions():
return "Error: Microphone permissions required."
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...")
return self._process_audio(audio, language)
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 try again."
except sr.WaitTimeoutError:
return "Listening timed out. Please try again."
except OSError as e:
return "OSError: Microphone not accessible. Check your connection and ALSA configuration."
except Exception as e:
return f"Error: {str(e)}"
def _process_audio(self, audio, language: str) -> str:
if language in ["ar-SA", "mixed"]:
try:
return self.recognizer.recognize_google(audio, language="ar-SA")
except sr.UnknownValueError:
if language == "mixed":
return self.recognizer.recognize_google(audio, language="en-US")
raise
return self.recognizer.recognize_google(audio, language="en-US")
|