def __init__(self, activity):
        Gtk.Toolbar.__init__(self)
        self._activity = activity
        self._speech = SpeechManager()

        self._speech.connect('play', self._play_cb)
        self._speech.connect('stop', self._stop_cb)
        self._speech.connect('pause', self._pause_cb)

        def make_button(icon, callback, tip):
            button = ToolButton(icon)
            button.show()
            button.connect('clicked', callback)
            self.insert(button, -1)
            button.set_tooltip(tip)
            return button

        self._play_button = make_button('media-playback-start',
                                        self._play_clicked_cb, _('Play'))

        self._pause_button = make_button('media-playback-pause',
                                         self._pause_clicked_cb, _('Pause'))

        self._stop_button = make_button('media-playback-stop',
                                        self._stop_clicked_cb, _('Stop'))

        self._stop_cb(None)
Esempio n. 2
0
    def __init__(self, activity):
        Gtk.Toolbar.__init__(self)
        self._activity = activity
        self._speech = SpeechManager()
        self._is_paused = False

        self.load_speech_parameters()

        self._voices = self._speech.get_all_voices()  # a dictionary

        locale = os.environ.get('LANG', '')
        language_location = locale.split('.', 1)[0].lower()
        language = language_location.split('_')[0]
        # if the language is es but not es_es default to es_la (latin voice)
        if language == 'es' and language_location != 'es_es':
            language_location = 'es_la'

        self._voice = 'en_us'
        if language_location in self._voices:
            self._voice = language_location
        elif language in self._voices:
            self._voice = language

        voice_names = []
        for language, name in self._voices.iteritems():
            voice_names.append((language, name))
        voice_names.sort(self._compare_voice)

        # Play button
        self._play_button = ToggleToolButton('media-playback-start')
        self._play_button.show()
        self._play_button.connect('toggled', self._play_toggled_cb)
        self.insert(self._play_button, -1)
        self._play_button.set_tooltip(_('Play / Pause'))

        # Stop button
        self._stop_button = ToolButton('media-playback-stop')
        self._stop_button.show()
        self._stop_button.connect('clicked', self._stop_clicked_cb)
        self._stop_button.set_sensitive(False)
        self.insert(self._stop_button, -1)
        self._stop_button.set_tooltip(_('Stop'))

        # Language list
        combo = ComboBox()
        which = 0
        for pair in voice_names:
            language, name = pair
            combo.append_item(language, name)
            if language == self._voice:
                combo.set_active(which)
            which += 1

        combo.connect('changed', self._voice_changed_cb)
        combotool = ToolComboBox(combo)
        self.insert(combotool, -1)
        combotool.show()

        self._speech.connect('stop', self._reset_buttons_cb)
Esempio n. 3
0
def get_speech_manager():
    global _speech_manager

    if _speech_manager is None:
        _speech_manager = SpeechManager()
        if not _speech_manager.enabled():
            _speech_manager = None
    return _speech_manager
Esempio n. 4
0
class Speaker:
    """Speak aloud the given text.
    """
    def __init__(self):
        self._speech_manager = SpeechManager()

    def speak(self, text):
        """Speaks aloud the given text.
        """
        text = text.replace("\"", "\\\"")
        if self._speech_manager.enabled():
            self._speech_manager.say_text(text)
Esempio n. 5
0
 def _speak(self, payload):
     if len(payload) > 0:
         [nick, language_option, text] = data_from_string(payload)
         if language_option == 'None':
             language_option = ''
         if text is not None:
             if self._tw.running_sugar:
                 from sugar3.speech import SpeechManager
                 sm = SpeechManager()
                 sm.say_text(text)
             else:
                 os.system('espeak %s "%s" --stdout | aplay' %
                           (language_option, str(text)))
Esempio n. 6
0
class Speaker:
    """Speak aloud the given text.
    """

    """espeak parameter: language pitch.
    """
    # TRANS: The language pitch (range [0 - 99], default 50 for English)
    # Look at http://espeak.sourceforge.net/commands.html for details
    PITCH = _("50")

    """espeak parameter: diction speed (average words per minute).
    """
    # TRANS: The diction speed, in average words per minute (range [80 - 390],
    # default 170 for English).
    # Look at http://espeak.sourceforge.net/commands.html for details
    SPEED = _("170")

    """espeak parameter: word gap in units of 10 ms.
    """
    # TRANS: The pause duration between words, in units of 10 ms.
    # Look at http://espeak.sourceforge.net/commands.html for details
    WORD_GAP = _("0")

    """espeak parameter: the language and voice variant.
    """
    # TRANS: The language and voice variant
    # Look at http://espeak.sourceforge.net/commands.html for details, and
    # http://espeak.sourceforge.net/languages.html to see if your language
    # is supported.
    VOICE = _("en")

    ESPEAK_COMMAND = "espeak -p%s -s%s -g%s -v%s \"%s\""

    def __init__(self):
        self._speech_manager = None
        if _HAS_SPEECH_MANAGER:
            self._speech_manager = SpeechManager()

    def speak(self, text):
        """Speaks aloud the given text.
        """
        text = text.replace("\"", "\\\"")
        if self._speech_manager and self._speech_manager.enabled():
            self._speech_manager.say_text(text)
        else:
            child = os.popen(Speaker.ESPEAK_COMMAND %
                             (Speaker.PITCH, Speaker.SPEED, Speaker.WORD_GAP,
                              Speaker.VOICE, text))
            child.read()
            child.close()
Esempio n. 7
0
 def _say(self, text, lang):
     speech_manager = SpeechManager()
     if speech_manager.get_is_playing():
         speech_manager.stop()
     else:
         try:
             speech_manager.say_text(text=text,
                                     lang_code=_ESPEAK_TO_NEW_LANG_CODE[
                                         dictdmodel.espeak_voices[lang]])
         except KeyError:
             speech_manager.say_text(text=text, lang_code='en')
Esempio n. 8
0
 def _say(self, text, lang):
     speech_manager = SpeechManager()
     if speech_manager.get_is_playing():
         speech_manager.stop()
     else:
         try:
             speech_manager.say_text(
                 text=text,
                 lang_code=_ESPEAK_TO_NEW_LANG_CODE[dictdmodel.espeak_voices[lang]]
             )
         except KeyError:
             speech_manager.say_text(text=text, lang_code='en')
Esempio n. 9
0
def speak(text):
    """ Speak text """

    if type(text) == float and int(text) == text:
        text = int(text)
    safetext = '{}'.format(quote(str(text)))

    lang = os.environ['LANG'][0:2]
    if lang in VOICES:
        language_option = '-v ' + VOICES[lang]
    else:
        language_option = ''

    try:
        from sugar3.speech import SpeechManager
        sm = SpeechManager()
        sm.say_text(text)
    except ModuleNotFoundError:  # for safety, if sugar's not installed / found [optional]
        os.system('espeak {} "{}" --stdout | aplay'.format(
            language_option, str(text)))
Esempio n. 10
0
 def __init__(self):
     self._speech_manager = None
     if _HAS_SPEECH_MANAGER:
         self._speech_manager = SpeechManager()
class SpeechToolbar(Gtk.Toolbar):
    def __init__(self, activity):
        Gtk.Toolbar.__init__(self)
        self._activity = activity
        self._speech = SpeechManager()

        self._speech.connect('play', self._play_cb)
        self._speech.connect('stop', self._stop_cb)
        self._speech.connect('pause', self._pause_cb)

        def make_button(icon, callback, tip):
            button = ToolButton(icon)
            button.show()
            button.connect('clicked', callback)
            self.insert(button, -1)
            button.set_tooltip(tip)
            return button

        self._play_button = make_button('media-playback-start',
                                        self._play_clicked_cb, _('Play'))

        self._pause_button = make_button('media-playback-pause',
                                         self._pause_clicked_cb, _('Pause'))

        self._stop_button = make_button('media-playback-stop',
                                        self._stop_clicked_cb, _('Stop'))

        self._stop_cb(None)

    def _play_cb(self, speech):
        self._play_button.set_sensitive(False)
        self._pause_button.set_sensitive(True)
        self._stop_button.set_sensitive(True)

    def _pause_cb(self, speech):
        self._play_button.set_sensitive(True)
        self._pause_button.set_sensitive(False)
        self._stop_button.set_sensitive(True)

    def _stop_cb(self, speech):
        self._play_button.set_sensitive(True)
        self._pause_button.set_sensitive(False)
        self._stop_button.set_sensitive(False)

    def _play_clicked_cb(self, widget):
        if not self._speech.get_is_paused():
            abi = self._activity.abiword_canvas
            text = abi.get_content("text/plain", None)
            self._speech.say_text(text[0])
        else:
            self._speech.restart()

    def _pause_clicked_cb(self, widget):
        self._speech.pause()

    def _stop_clicked_cb(self, widget):
        self._speech.stop()
Esempio n. 12
0
class SpeechToolbar(Gtk.Toolbar):
    def __init__(self, activity):
        Gtk.Toolbar.__init__(self)
        self._activity = activity
        self._speech = SpeechManager()
        self._is_paused = False

        self.load_speech_parameters()

        self._voices = self._speech.get_all_voices()  # a dictionary

        locale = os.environ.get('LANG', '')
        language_location = locale.split('.', 1)[0].lower()
        language = language_location.split('_')[0]
        # if the language is es but not es_es default to es_la (latin voice)
        if language == 'es' and language_location != 'es_es':
            language_location = 'es_la'

        self._voice = 'en_us'
        if language_location in self._voices:
            self._voice = language_location
        elif language in self._voices:
            self._voice = language

        voice_names = []
        for language, name in self._voices.iteritems():
            voice_names.append((language, name))
        voice_names.sort(self._compare_voice)

        # Play button
        self._play_button = ToggleToolButton('media-playback-start')
        self._play_button.show()
        self._play_button.connect('toggled', self._play_toggled_cb)
        self.insert(self._play_button, -1)
        self._play_button.set_tooltip(_('Play / Pause'))

        # Stop button
        self._stop_button = ToolButton('media-playback-stop')
        self._stop_button.show()
        self._stop_button.connect('clicked', self._stop_clicked_cb)
        self._stop_button.set_sensitive(False)
        self.insert(self._stop_button, -1)
        self._stop_button.set_tooltip(_('Stop'))

        # Language list
        combo = ComboBox()
        which = 0
        for pair in voice_names:
            language, name = pair
            combo.append_item(language, name)
            if language == self._voice:
                combo.set_active(which)
            which += 1

        combo.connect('changed', self._voice_changed_cb)
        combotool = ToolComboBox(combo)
        self.insert(combotool, -1)
        combotool.show()

        self._speech.connect('stop', self._reset_buttons_cb)

    def _compare_voice(self, a, b):
        if a[1].lower() == b[1].lower():
            return 0
        if a[1].lower() < b[1].lower():
            return -1
        if a[1].lower() > b[1].lower():
            return 1

    def _voice_changed_cb(self, combo):
        self._voice = combo.props.value
        self._speech.say_text(self._voices[self._voice])
        self.save_speech_parameters()

    def load_speech_parameters(self):
        speech_parameters = {}
        data_path = os.path.join(self._activity.get_activity_root(), 'data')
        data_file_name = os.path.join(data_path, 'speech_params.json')
        if os.path.exists(data_file_name):
            f = open(data_file_name, 'r')
            try:
                speech_parameters = json.load(f)
                self._voice = speech_parameters['voice']
            finally:
                f.close()

    def save_speech_parameters(self):
        speech_parameters = {}
        speech_parameters['voice'] = self._voice
        data_path = os.path.join(self._activity.get_activity_root(), 'data')
        data_file_name = os.path.join(data_path, 'speech_params.json')
        f = open(data_file_name, 'w')
        try:
            json.dump(speech_parameters, f)
        finally:
            f.close()

    def _reset_buttons_cb(self, widget=None):
        self._play_button.set_icon_name('media-playback-start')
        self._stop_button.set_sensitive(False)
        self._is_paused = False

    def _play_toggled_cb(self, widget):
        self._stop_button.set_sensitive(True)
        if widget.get_active():
            self._play_button.set_icon_name('media-playback-pause')
            if not self._is_paused:
                self._speech.say_text(self._activity._view.get_marked_words(),
                                      lang_code=self._voice)
            else:
                self._speech.restart()
        else:
            self._play_button.set_icon_name('media-playback-start')
            self._is_paused = True
            self._speech.pause()

    def _stop_clicked_cb(self, widget):
        self._stop_button.set_sensitive(False)
        self._play_button.set_icon_name('media-playback-start')
        self._play_button.set_active(False)
        self._is_paused = False
        self._speech.stop()
Esempio n. 13
0
 def __init__(self):
     self._speech_manager = SpeechManager()