瀏覽代碼

use a thread to start the order listener in background

nico 8 年之前
父節點
當前提交
46dfb1b993
共有 3 個文件被更改,包括 15 次插入4 次删除
  1. 7 2
      core/MainController.py
  2. 7 1
      core/OrderListener.py
  3. 1 1
      settings.yml

+ 7 - 2
core/MainController.py

@@ -13,7 +13,7 @@ class MainController:
         # get global configuration
         self.settings = SettingLoader.get_settings()
 
-        # create an order listener object
+        # create an order listener object. This last will the trigger callback before starting
         self.order_listener = OrderListener(self.analyse_order)
         # Wait that the jarvis trigger is pronounced by the user
         self.trigger_instance = self._get_default_trigger()
@@ -28,8 +28,9 @@ class MainController:
         """
         # pause the snowboy process
         self.trigger_instance.pause()
+        # start listening for an order
+        self.order_listener.start()
         Say(message=self.settings.random_wake_up_answers)
-        self.order_listener.load_stt_plugin()
 
     def analyse_order(self, order):
         """
@@ -41,6 +42,10 @@ class MainController:
         # restart the trigger when the order analyser has finish his job
         Utils.print_info("Waiting for trigger detection")
         self.trigger_instance.unpause()
+        # create a new order listener that will wait for start
+        self.order_listener = OrderListener(self.analyse_order)
+        # restart the trigger to catch the hotword
+        self.trigger_instance.start()
 
     def _get_default_trigger(self):
         """

+ 7 - 1
core/OrderListener.py

@@ -1,5 +1,7 @@
 import logging
 import os
+from threading import Thread
+
 from cffi import FFI as _FFI
 
 from core.Utils import Utils
@@ -9,7 +11,7 @@ logging.basicConfig()
 logger = logging.getLogger("jarvis")
 
 
-class OrderListener:
+class OrderListener(Thread):
 
     def __init__(self, callback=None, stt=None):
         """
@@ -22,12 +24,16 @@ class OrderListener:
         """
         # this is a trick to ignore ALSA output error
         # see http://stackoverflow.com/questions/7088672/pyaudio-working-but-spits-out-error-messages-each-time
+        super(OrderListener, self).__init__()
         self.stt = stt
         self._ignore_stderr()
         self.stt_module_name = stt
         self.callback = callback
         self.settings = SettingLoader.get_settings()
 
+    def run(self):
+        self.load_stt_plugin()
+
     def load_stt_plugin(self):
         if self.stt is None:
             self.stt_module_name = self.settings.default_stt_name

+ 1 - 1
settings.yml

@@ -47,7 +47,7 @@ speech_to_text:
 # - voxygen
 text_to_speech:
   - pico2wave:
-      language: "en-US"
+      language: "fr-FR"
       cache: True
   - voxygen:
       language: "fr"