def say(self, message): """ USe TTS to speak out loud the Message. A message can be a string, a list or a dict If it's a string, simply use the TTS with the message If it's a list, we select randomly a string in the list and give it to the TTS If it's a dict, we use the template given in parameter to create a string that we give to the TTS :param message: Can be a String or a dict or a list .. raises:: TTSModuleNotFound """ logger.debug("[NeuronModule] Say() called with message: %s" % message) tts_message = None # we can save parameters from the neuron in memory Cortex.save_neuron_parameter_in_memory(self.kalliope_memory, message) if isinstance(message, str) or isinstance(message, six.text_type): logger.debug("[NeuronModule] message is string") tts_message = message if isinstance(message, list): logger.debug("[NeuronModule] message is list") tts_message = random.choice(message) if isinstance(message, dict): logger.debug("[NeuronModule] message is dict") tts_message = self._get_message_from_dict(message) if tts_message is not None: logger.debug("[NeuronModule] tts_message to say: %s" % tts_message) self.tts_message = tts_message Utils.print_success(tts_message) # save in kalliope memory the last tts message Cortex.save("kalliope_last_tts_message", tts_message) # process the audio only if the mute flag is false if self.settings.options.mute: logger.debug("[NeuronModule] mute is True, Kalliope is muted") else: logger.debug( "[NeuronModule] mute is False, make Kalliope speaking") HookManager.on_start_speaking() # get the instance of the TTS module tts_folder = None if self.settings.resources: tts_folder = self.settings.resources.tts_folder tts_module_instance = Utils.get_dynamic_class_instantiation( package_name="tts", module_name=self.tts.name, parameters=self.tts.parameters, resources_dir=tts_folder) # generate the audio file and play it tts_module_instance.say(tts_message) HookManager.on_stop_speaking()
def say(self, message): """ USe TTS to speak out loud the Message. A message can be a string, a list or a dict If it's a string, simply use the TTS with the message If it's a list, we select randomly a string in the list and give it to the TTS If it's a dict, we use the template given in parameter to create a string that we give to the TTS :param message: Can be a String or a dict or a list .. raises:: TTSModuleNotFound """ logger.debug("[NeuronModule] Say() called with message: %s" % message) tts_message = None # we can save parameters from the neuron in memory Cortex.save_neuron_parameter_in_memory(self.kalliope_memory, message) if isinstance(message, str) or isinstance(message, six.text_type): logger.debug("[NeuronModule] message is string") tts_message = message if isinstance(message, list): logger.debug("[NeuronModule] message is list") tts_message = random.choice(message) if isinstance(message, dict): logger.debug("[NeuronModule] message is dict") tts_message = self._get_message_from_dict(message) if tts_message is not None: logger.debug("[NeuronModule] tts_message to say: %s" % tts_message) self.tts_message = tts_message Utils.print_success(tts_message) # save in kalliope memory the last tts message Cortex.save("kalliope_last_tts_message", tts_message) # process the audio only if the mute flag is false if self.settings.options.mute: logger.debug("[NeuronModule] mute is True, Kalliope is muted") else: logger.debug("[NeuronModule] mute is False, make Kalliope speaking") HookManager.on_start_speaking() # get the instance of the TTS module tts_folder = None if self.settings.resources: tts_folder = self.settings.resources.tts_folder tts_module_instance = Utils.get_dynamic_class_instantiation(package_name="tts", module_name=self.tts.name, parameters=self.tts.parameters, resources_dir=tts_folder) # generate the audio file and play it tts_module_instance.say(tts_message) HookManager.on_stop_speaking()
def test_save_neuron_parameter_in_memory(self): # test with a list of parameter with bracket neuron1_parameters = {"key1": "value1", "key2": "value2"} dict_val_to_save = {"my_key_in_memory": "{{key1}}"} expected_dict = {"my_key_in_memory": "value1"} Cortex.save_neuron_parameter_in_memory( kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(expected_dict, Cortex.memory) # test with a list of parameter with brackets and string self.setUp() # clean neuron1_parameters = {"key1": "value1", "key2": "value2"} dict_val_to_save = {"my_key_in_memory": "string {{key1}}"} expected_dict = {"my_key_in_memory": "string value1"} Cortex.save_neuron_parameter_in_memory( kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(expected_dict, Cortex.memory) # test with a list of parameter with only a string. Neuron parameters are not used self.setUp() # clean neuron1_parameters = {"key1": "value1", "key2": "value2"} dict_val_to_save = {"my_key_in_memory": "string"} expected_dict = {"my_key_in_memory": "string"} Cortex.save_neuron_parameter_in_memory( kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(expected_dict, Cortex.memory) # test with an empty list of parameter to save (no kalliope_memory set) self.setUp() # clean neuron1_parameters = {"key1": "value1", "key2": "value2"} dict_val_to_save = None Cortex.save_neuron_parameter_in_memory( kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(dict(), Cortex.memory) # test with a neuron that return a dict in each parameter self.setUp() # clean neuron1_parameters = {"key1": {"key2": "value2", "key3": "value3"}} dict_val_to_save = {"my_key_in_memory": "{{key1}}"} expected_dict = { "my_key_in_memory": { "key2": "value2", "key3": "value3" } } Cortex.save_neuron_parameter_in_memory( kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(expected_dict, Cortex.memory)
def test_save_neuron_parameter_in_memory(self): # test with a list of parameter with bracket neuron1_parameters = { "key1": "value1", "key2": "value2" } dict_val_to_save = {"my_key_in_memory": "{{key1}}"} expected_dict = {"my_key_in_memory": "value1"} Cortex.save_neuron_parameter_in_memory(kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(expected_dict, Cortex.memory) # test with a list of parameter with brackets and string self.setUp() # clean neuron1_parameters = { "key1": "value1", "key2": "value2" } dict_val_to_save = {"my_key_in_memory": "string {{key1}}"} expected_dict = {"my_key_in_memory": "string value1"} Cortex.save_neuron_parameter_in_memory(kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(expected_dict, Cortex.memory) # test with a list of parameter with only a string. Neuron parameters are not used self.setUp() # clean neuron1_parameters = { "key1": "value1", "key2": "value2" } dict_val_to_save = {"my_key_in_memory": "string"} expected_dict = {"my_key_in_memory": "string"} Cortex.save_neuron_parameter_in_memory(kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(expected_dict, Cortex.memory) # test with an empty list of parameter to save (no kalliope_memory set) self.setUp() # clean neuron1_parameters = { "key1": "value1", "key2": "value2" } dict_val_to_save = None Cortex.save_neuron_parameter_in_memory(kalliope_memory_dict=dict_val_to_save, neuron_parameters=neuron1_parameters) self.assertDictEqual(dict(), Cortex.memory)