|  | @@ -0,0 +1,52 @@
 | 
	
		
			
				|  |  | +import speech_recognition as sr
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +from core import Utils
 | 
	
		
			
				|  |  | +from core.OrderListener import OrderListener
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class Apiai(OrderListener):
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def __init__(self, callback=None, **kwargs):
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        Start recording the microphone and analyse audio with Apiai api
 | 
	
		
			
				|  |  | +        :param callback: The callback function to call to send the text
 | 
	
		
			
				|  |  | +        :param kwargs:
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        OrderListener.__init__(self)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        Start recording the microphone
 | 
	
		
			
				|  |  | +        :return:
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        # callback function to call after the translation speech/tex
 | 
	
		
			
				|  |  | +        self.callback = callback
 | 
	
		
			
				|  |  | +        # obtain audio from the microphone
 | 
	
		
			
				|  |  | +        r = sr.Recognizer()
 | 
	
		
			
				|  |  | +        with sr.Microphone() as source:
 | 
	
		
			
				|  |  | +            # listen for 1 second to calibrate the energy threshold for ambient noise levels
 | 
	
		
			
				|  |  | +            r.adjust_for_ambient_noise(source)
 | 
	
		
			
				|  |  | +            Utils.print_info("Say something!")
 | 
	
		
			
				|  |  | +            audio = r.listen(source)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        # recognize speech using Apiai Speech Recognition
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            key = kwargs.get('key', None)
 | 
	
		
			
				|  |  | +            language = kwargs.get('language', "en")
 | 
	
		
			
				|  |  | +            session_id= kwargs.get('session_id', None)
 | 
	
		
			
				|  |  | +            show_all = kwargs.get('show_all', False)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            captured_audio = r.recognize_api(audio, client_access_token=key, language=language, session_id=session_id, show_all=show_all)
 | 
	
		
			
				|  |  | +            Utils.print_success("Apiai Speech Recognition thinks you said %s" % captured_audio)
 | 
	
		
			
				|  |  | +            self._analyse_audio(captured_audio)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        except sr.UnknownValueError as e:
 | 
	
		
			
				|  |  | +            Utils.print_warning("Apiai Speech Recognition could not understand audio; {0}".format(e))
 | 
	
		
			
				|  |  | +        except sr.RequestError as e:
 | 
	
		
			
				|  |  | +            Utils.print_danger("Could not request results from Apiai Speech Recognition service; {0}".format(e))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def _analyse_audio(self, audio):
 | 
	
		
			
				|  |  | +        # if self.main_controller is not None:
 | 
	
		
			
				|  |  | +        #     self.main_controller.analyse_order(audio)
 | 
	
		
			
				|  |  | +        if self.callback is not None:
 | 
	
		
			
				|  |  | +            self.callback(audio)
 |