Codebase list sugar-read-activity / ef22f58
Remove speech language Doesn't work on systems where language support packages are trimmed. James Cameron 4 years ago
1 changed file(s) with 1 addition(s) and 75 deletion(s). Raw diff Collapse all Expand all
3434 self._speech = SpeechManager()
3535 self._is_paused = False
3636
37 self.load_speech_parameters()
38
39 self._voices = self._speech.get_all_voices() # a dictionary
40
41 locale = os.environ.get('LANG', '')
42 language_location = locale.split('.', 1)[0].lower()
43 language = language_location.split('_')[0]
44 # if the language is es but not es_es default to es_la (latin voice)
45 if language == 'es' and language_location != 'es_es':
46 language_location = 'es_la'
47
48 self._voice = 'en_us'
49 if language_location in self._voices:
50 self._voice = language_location
51 elif language in self._voices:
52 self._voice = language
53
54 voice_names = []
55 for language, name in self._voices.iteritems():
56 voice_names.append((language, name))
57 voice_names.sort(self._compare_voice)
58
5937 # Play button
6038 self._play_button = ToggleToolButton('media-playback-start')
6139 self._play_button.show()
7149 self.insert(self._stop_button, -1)
7250 self._stop_button.set_tooltip(_('Stop'))
7351
74 # Language list
75 combo = ComboBox()
76 which = 0
77 for pair in voice_names:
78 language, name = pair
79 combo.append_item(language, name)
80 if language == self._voice:
81 combo.set_active(which)
82 which += 1
83
84 combo.connect('changed', self._voice_changed_cb)
85 combotool = ToolComboBox(combo)
86 self.insert(combotool, -1)
87 combotool.show()
88
8952 self._speech.connect('stop', self._reset_buttons_cb)
90
91 def _compare_voice(self, a, b):
92 if a[1].lower() == b[1].lower():
93 return 0
94 if a[1].lower() < b[1].lower():
95 return -1
96 if a[1].lower() > b[1].lower():
97 return 1
98
99 def _voice_changed_cb(self, combo):
100 self._voice = combo.props.value
101 self._speech.say_text(self._voices[self._voice])
102 self.save_speech_parameters()
103
104 def load_speech_parameters(self):
105 speech_parameters = {}
106 data_path = os.path.join(self._activity.get_activity_root(), 'data')
107 data_file_name = os.path.join(data_path, 'speech_params.json')
108 if os.path.exists(data_file_name):
109 f = open(data_file_name, 'r')
110 try:
111 speech_parameters = json.load(f)
112 self._voice = speech_parameters['voice']
113 finally:
114 f.close()
115
116 def save_speech_parameters(self):
117 speech_parameters = {}
118 speech_parameters['voice'] = self._voice
119 data_path = os.path.join(self._activity.get_activity_root(), 'data')
120 data_file_name = os.path.join(data_path, 'speech_params.json')
121 f = open(data_file_name, 'w')
122 try:
123 json.dump(speech_parameters, f)
124 finally:
125 f.close()
12653
12754 def _reset_buttons_cb(self, widget=None):
12855 self._play_button.set_icon_name('media-playback-start')
13562 self._play_button.set_icon_name('media-playback-pause')
13663 if not self._is_paused:
13764 self._speech.say_text(
138 self._activity._view.get_marked_words(),
139 lang_code=self._voice)
65 self._activity._view.get_marked_words())
14066 else:
14167 self._speech.restart()
14268 else: