MainController.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from core import Utils
  2. from core.ConfigurationManager import SettingLoader
  3. from core.OrderAnalyser import OrderAnalyser
  4. from core.OrderListener import OrderListener
  5. from core.TriggerLauncher import TriggerLauncher
  6. from neurons import Say
  7. class MainController:
  8. def __init__(self, brain_file=None):
  9. self.brain_file = brain_file
  10. # get global configuration
  11. self.settings = SettingLoader.get_settings()
  12. # create an order listener object
  13. self.order_listener = OrderListener(self.analyse_order)
  14. # Wait that the jarvis trigger is pronounced by the user
  15. self.trigger_instance = self._get_default_trigger()
  16. self.trigger_instance.start()
  17. Utils.print_info("Waiting for trigger detection")
  18. def callback(self):
  19. """
  20. # we have detected the hotword, we can now pause the Jarvis Trigger for a while
  21. # The user can speak out loud his order during this time.
  22. :return:
  23. """
  24. # pause the snowboy process
  25. self.trigger_instance.pause()
  26. Say(message=self.settings.random_wake_up_answers)
  27. self.order_listener.load_stt_plugin()
  28. def analyse_order(self, order):
  29. """
  30. Receive an order, try to retreive it in the brain.yml to launch to attached plugins
  31. :return:
  32. """
  33. order_analyser = OrderAnalyser(order, main_controller=self, brain_file=self.brain_file)
  34. order_analyser.start()
  35. # restart the trigger when the order analyser has finish his job
  36. Utils.print_info("Waiting for trigger detection")
  37. self.trigger_instance.unpause()
  38. def _get_default_trigger(self):
  39. """
  40. Return an instance of the default trigger
  41. :return:
  42. """
  43. for trigger in self.settings.triggers:
  44. if trigger.name == self.settings.default_trigger_name:
  45. return TriggerLauncher.get_trigger(trigger, callback=self.callback)
  46. def unpause_jarvis_trigger(self):
  47. print "call unpause"
  48. self.trigger_instance.unpause()