فهرست منبع

[Feature] #427 Manage tts list for the settings neuron

ThiBuff 7 سال پیش
والد
کامیت
e34ea08de7
2فایلهای تغییر یافته به همراه100 افزوده شده و 3 حذف شده
  1. 40 1
      kalliope/core/ConfigurationManager/SettingEditor.py
  2. 60 2
      kalliope/neurons/settings/settings.py

+ 40 - 1
kalliope/core/ConfigurationManager/SettingEditor.py

@@ -11,6 +11,7 @@ logger = logging.getLogger("kalliope")
 class SettingEditor(object):
     """This class provides methods/functions to update properties from the Settings"""
 
+    # Options
     @staticmethod
     def set_mute_status(mute=False):
         """
@@ -46,6 +47,29 @@ class SettingEditor(object):
             HookManager.on_undeaf()
         settings.options.deaf = deaf
 
+    @staticmethod
+    def set_adjust_for_ambient_noise_second(adjust_for_ambient_noise_second):
+        """
+        Set a new value for the adjust_for_ambient_noise_second;
+        Must be an integer.
+        :param adjust_for_ambient_noise_second: new value to push to the adjust_for_ambient_noise_second in the Options settings
+        """
+        if isinstance(adjust_for_ambient_noise_second, int):
+            settings = SettingLoader().settings
+            settings.options.adjust_for_ambient_noise_second = adjust_for_ambient_noise_second
+
+    @staticmethod
+    def set_energy_threshold(energy_threshold):
+        """
+        Set the new value of the energy threshold to the settings.
+        Must be an integer.
+        :param energy_threshold: new value for the energy_threshold to push into the settings
+        """
+        if isinstance(energy_threshold, int):
+            settings = SettingLoader().settings
+            settings.options.energy_threshold = energy_threshold
+
+    # Players
     @staticmethod
     def set_default_player_name(default_player_name):
         """
@@ -55,6 +79,7 @@ class SettingEditor(object):
         settings = SettingLoader().settings
         settings.default_player_name = default_player_name
 
+    # TTS
     @staticmethod
     def set_default_tts_name(default_tts_name):
         """
@@ -64,6 +89,19 @@ class SettingEditor(object):
         settings = SettingLoader().settings
         settings.default_tts_name = default_tts_name
 
+    @staticmethod
+    def set_ttss(new_tts):
+        """
+        Add a new TTS object in the list of tts in the settings.
+        If TTS already exists in settings, it will be updated with the new tts provided values.
+        :param new_tts: the new TTS object to add in the settings.
+        """
+        settings = SettingLoader().settings
+        list_no_duplicate_tts = [tts for tts in settings.ttss if tts.name != new_tts.name]
+        list_no_duplicate_tts.append(new_tts)
+        settings.ttss = list_no_duplicate_tts
+
+    # STT
     @staticmethod
     def set_default_stt_name(default_stt_name):
         """
@@ -73,6 +111,7 @@ class SettingEditor(object):
         settings = SettingLoader().settings
         settings.default_stt_name = default_stt_name
 
+    # TRIGGER
     @staticmethod
     def set_default_trigger_name(default_trigger_name):
         """
@@ -80,4 +119,4 @@ class SettingEditor(object):
         :param default_trigger_name: string value
         """
         settings = SettingLoader().settings
-        settings.default_trigger_name = default_trigger_name
+        settings.default_trigger_name = default_trigger_name

+ 60 - 2
kalliope/neurons/settings/settings.py

@@ -3,6 +3,7 @@ import logging
 from kalliope import SignalLauncher
 from kalliope.core import NeuronModule
 from kalliope.core.ConfigurationManager import SettingEditor
+from kalliope.core.Models.settings.Tts import Tts
 
 logging.basicConfig()
 logger = logging.getLogger("kalliope")
@@ -10,18 +11,22 @@ logger = logging.getLogger("kalliope")
 
 class Settings(NeuronModule):
     """
-    TODO : manage update dynamic list of the stts, ttss, triggers, etc ...
     """
 
     def __init__(self, **kwargs):
         super(Settings, self).__init__(**kwargs)
 
         self.default_tts_name = kwargs.get("default_tts_name", None)
+        self.tts = kwargs.get("tts", None)
+
         self.default_stt_name = kwargs.get("default_stt_name", None)
         self.default_trigger_name = kwargs.get("default_trigger_name", None)
         self.default_player_name = kwargs.get("default_player_name", None)
+
         self.deaf = kwargs.get("deaf", None)
         self.mute = kwargs.get("mute", None)
+        self.energy_threshold = kwargs.get("energy_threshold", None)
+        self.adjust_for_ambient_noise_second = kwargs.get("adjust_for_ambient_noise_second", None)
 
         if self._is_parameters_ok():
             self._set_settings()
@@ -31,28 +36,43 @@ class Settings(NeuronModule):
         Check the validity for each parameter
         :return: True if all parameters are set correctly, False otherwise.
         """
+
+        # Players
         if self.default_player_name:
             if not self._check_name_in_list_settings_entry(self.default_player_name, self.settings.players):
                 logger.debug("[Settings] default_player_name %s is not defined in settings file ",
                              self.default_player_name)
                 return False
 
+        # STT
         if self.default_stt_name:
             if not self._check_name_in_list_settings_entry(self.default_stt_name, self.settings.stts):
                 logger.debug("[Settings] default_stt_name %s is not defined in settings file ", self.default_stt_name)
                 return False
 
+        # TRIGGER
         if self.default_trigger_name:
             if self._check_name_in_list_settings_entry(self.default_trigger_name, self.settings.triggers):
                 logger.debug("[Settings] default_trigger_name %s is not defined in settings file ",
                              self.default_trigger_name)
                 return False
 
+        # TTS
         if self.default_tts_name:
             if not self._check_name_in_list_settings_entry(self.default_tts_name, self.settings.ttss):
                 logger.debug("[Settings] default_tts_name %s is not defined in settings file ", self.default_tts_name)
                 return False
+        # TODO remove TTS management from the NeuronModule class
+        if self.tts:
+            if not isinstance(self.tts, list):
+                logger.debug("[Settings] tts current type: %s. tts should be a list", type(self.tts))
+                return False
+            for tts_el in self.tts:
+                if not isinstance(tts_el, dict):
+                    logger.debug("[Settings] tts element current type: %s. tts element should be a dict", type(tts_el))
+                    return False
 
+        # Options
         if self.deaf is not None:
             if not isinstance(self.deaf, bool):
                 logger.debug("[Settings] deaf %s is not a correct value, you must define True or False", self.deaf)
@@ -63,6 +83,27 @@ class Settings(NeuronModule):
                 logger.debug("[Settings] mute %s is not a correct value, you must define True or False", self.mute)
                 return False
 
+        if self.energy_threshold is not None:
+            if not isinstance(self.energy_threshold, int):
+                logger.debug("[Settings] energy_threshold %s is not a correct integer, you must define a number",
+                             self.energy_threshold)
+                return False
+
+        if self.adjust_for_ambient_noise_second is not None:
+            if not isinstance(self.adjust_for_ambient_noise_second, int):
+                logger.debug(
+                    "[Settings] adjust_for_ambient_noise_second %s is not a correct integer, you must define a number",
+                    self.adjust_for_ambient_noise_second)
+                return False
+
+        # TODO HOOKS
+
+        # TODO Resources
+
+        # TODO REST API
+
+        # TODO Variables
+
         return True
 
     def _set_settings(self):
@@ -78,6 +119,16 @@ class Settings(NeuronModule):
         if self.default_tts_name:
             SettingEditor.set_default_tts_name(self.default_tts_name)
 
+        if self.tts:
+            for tts_el in self.tts:
+                if isinstance(tts_el, dict):
+                    for tts_name in tts_el:
+                        name = tts_name
+                        parameters = tts_el[name]
+                        new_tts = Tts(name=name, parameters=parameters)
+                        SettingEditor.set_ttss(new_tts)
+
+        # Options
         if self.deaf is not None:
             signal_order = SignalLauncher.get_order_instance()
             if signal_order is not None:
@@ -86,6 +137,13 @@ class Settings(NeuronModule):
         if self.mute is not None:
             SettingEditor.set_mute_status(self.mute)
 
+        if self.energy_threshold is not None:
+            SettingEditor.set_energy_threshold(self.energy_threshold)
+
+        if self.adjust_for_ambient_noise_second is not None:
+            SettingEditor.set_adjust_for_ambient_noise_second(self.adjust_for_ambient_noise_second)
+
+
     @staticmethod
     def _check_name_in_list_settings_entry(name_to_check, list_settings_entry):
         """
@@ -99,4 +157,4 @@ class Settings(NeuronModule):
         for settings_entry in list_settings_entry:
             if settings_entry.name == name_to_check:
                 found = True
-        return found
+        return found