123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- from dialog import Dialog
- import locale
- from core import ConfigurationManager
- from core import OrderListener
- from neurons import Say
- class ShellGui:
- def __init__(self):
- # get settings
- self.conf = ConfigurationManager().get_settings()
- locale.setlocale(locale.LC_ALL, '')
- self.d = Dialog(dialog="dialog")
- self.d.set_background_title("Jarvis shell UI")
- self.show_main_menu()
- def show_main_menu(self):
- """
- Main menu of the shell UI.
- Provide a list of action the user can select to test his settings
- :return:
- """
- code, tag = self.d.menu("Test your JARVIS settings from this menu",
- choices=[("TTS", "Text to Speech"),
- ("STT", "Speech to text")])
- if code == self.d.OK:
- if tag == "STT":
- self.show_stt_test_menu()
- if tag == "TTS":
- self.show_tts_test_menu()
- def show_stt_test_menu(self):
- # we get STT from settings
- stt_list = ConfigurationManager.get_stt_list()
- print stt_list
- choices = self._get_choices_tuple_from_list(stt_list)
- code, tag = self.d.menu("Select the STT to test:",
- choices=choices)
- if code == self.d.CANCEL:
- self.show_main_menu()
- if code == self.d.OK:
- print tag
- self.d.infobox("Please talk now")
- order_listener = OrderListener(callback=self.callback_stt, stt=str(tag))
- order_listener.load_stt_plugin()
- def show_tts_test_menu(self, sentence_to_test=None):
- """
- A menu for testing text to speech
- :return:
- """
- continue_bool = True
- # if we don't have yet a sentence to test, we ask the user to type one
- if sentence_to_test is None:
- # First, we ask the user to type a sentence that will be passed in the TTS
- code, sentence_to_test = self.d.inputbox("Please type the sentence you want to test", height=20, width=50)
- if code == self.d.CANCEL:
- self.show_main_menu()
- continue_bool = False
- if code == self.d.OK:
- continue_bool = True
- if continue_bool:
- # we get TTS from settings
- tts_list = ConfigurationManager.get_tts_list()
- # create a list of tuple that can be used by the dialog menu
- choices = self._get_choices_tuple_from_list(tts_list)
- code, tag = self.d.menu("Sentence to test: %s" % sentence_to_test,
- choices=choices)
- if code == self.d.CANCEL:
- self.show_tts_test_menu()
- if code == self.d.OK:
- self._run_tts_test(tag, sentence_to_test)
- # then go back to this menu with the same sentence
- self.show_tts_test_menu(sentence_to_test=sentence_to_test)
- def _run_tts_test(self, tag, sentence_to_test):
- """
- Call the TTS
- :param tag:
- :param sentence_to_test:
- :return:
- """
- Say(message=sentence_to_test, tts=tag)
- @staticmethod
- def _get_choices_tuple_from_list(list_to_convert):
- """
- Return a list of tup that can be used in Dialog menu
- :param stt_list:
- :return:
- """
- # create a list of tuple that can be used by the dialog menu
- choices = list()
- for el in list_to_convert:
- try:
- for name, settings in el.iteritems():
- print name
- print settings
- tup = (str(name), str(settings))
- choices.append(tup)
- except AttributeError:
- # sometime there is no settings for the STT key
- tup = (str(el), str("No settings"))
- choices.append(tup)
- return choices
- def callback_stt(self, audio):
- """
- Callback function called after the STT has finish his job
- :param audio: Text from the translated audio
- """
- code = self.d.msgbox("The STT engine think you said:\n %s" % audio, width=50)
- if code == self.d.OK:
- self.show_stt_test_menu()
|