@@ -38,7 +38,7 @@ def __init__(self):
3838 self .font = "Georgia 14" ;self .highlight_font = "Georgia 14" ;
3939 self .highlight_color = "#000000000000" ;
4040 self .background_highlight_color = "#34346565a4a4" ;
41- self .speech_module = 0 ;self .speech_language = 10 ;
41+ self .speech_module = - 1 ;self .speech_language = - 1 ; self . speech_person = - 1 ;
4242 self .speech_rate = 0 ;self .speech_pitch = 0 ;self .speech_volume = 100 ;
4343 self .time_between_repeated_scanning = 0 ;self .scan_resolution = 300 ;
4444 self .scan_driver = 1 ;self .scanner_cache_calibration = 0 ;
@@ -73,6 +73,7 @@ def set_from_file(self,filename):
7373 self .language_3 = int (config .get ('cfg' ,"language_3" ))
7474 self .speech_module = int (config .get ('cfg' ,"speech_module" ))
7575 self .speech_language = int (config .get ('cfg' ,"speech_language" ))
76+ self .speech_person = int (config .get ('cfg' ,"speech_person" ))
7677 self .speech_rate = int (config .get ('cfg' ,"speech_rate" ))
7778 self .speech_volume = int (config .get ('cfg' ,"speech_volume" ))
7879 self .speech_pitch = int (config .get ('cfg' ,"speech_pitch" ))
@@ -95,6 +96,34 @@ def set_from_file(self,filename):
9596 else :
9697 self .__init__ ()
9798
99+ # Set speech module, language and person if speech_module is not set
100+ def set_default_speech_module_and_language (self ):
101+ if (self .speech_module == - 1 ):
102+ test = speech .Speech ()
103+ output_modules_list = test .list_output_modules ()
104+ if ("espeak-ng" in output_modules_list ):
105+ self .speech_module = output_modules_list .index ('espeak-ng' )
106+ test .set_output_module ('espeak-ng' )
107+ elif ("espeak" in output_modules_list ):
108+ self .speech_module = output_modules_list .index ('espeak' )
109+ test .set_output_module ('espeak' )
110+
111+ # if espeak or espeak-ng set language
112+ if (self .speech_module != - 1 ):
113+ import locale
114+ language_code , encoding = locale .getdefaultlocale ()
115+ localeValues = language_code .split ('_' )
116+ language = localeValues [0 ]
117+ language_person_dict = test .get_language_person_dict ()
118+ if (language in language_person_dict .keys ()):
119+ self .speech_language = list (language_person_dict .keys ()).index (language )
120+ self .speech_person = 0 ;
121+ else :
122+ self .speech_module = 0 ;self .speech_language = 0 ;self .speech_person = 0 ;
123+
124+ #Closing
125+ test .close ()
126+
98127 def save_to_file (self ,filename ):
99128 #Removing old configuration file
100129 try :
@@ -115,6 +144,7 @@ def save_to_file(self,filename):
115144 config .set ('cfg' ,"language_3" ,str (self .language_3 ))
116145 config .set ('cfg' ,"speech_module" ,str (self .speech_module ))
117146 config .set ('cfg' ,"speech_language" ,str (self .speech_language ))
147+ config .set ('cfg' ,"speech_person" ,str (self .speech_person ))
118148 config .set ('cfg' ,"speech_pitch" ,str (self .speech_pitch ))
119149 config .set ('cfg' ,"speech_volume" ,str (self .speech_volume ))
120150 config .set ('cfg' ,"speech_rate" ,str (self .speech_rate ))
@@ -182,14 +212,62 @@ def change_engine(*data):
182212
183213
184214 def change_speech_module (* data ):
185- index_engine = combobox_speech_module .get_active ()
186- combobox_speech_language . clear ()
215+ module_index = combobox_speech_module .get_active ()
216+
187217 test = speech .Speech ()
188- list = test .list_output_modules ()
189- test .set_output_module (list [index_engine ])
190- for item in test .list_voices ():
191- combobox_speech_language .add_item (item )
192- combobox_speech_language .set_active (self .speech_language )
218+ output_modules_list = test .list_output_modules ()
219+ test .set_output_module (output_modules_list [module_index ])
220+
221+ self .speech_language_person_dict = test .get_language_person_dict ()
222+ test .close ()
223+
224+ # Disconnecting for preventng function calls while clearing
225+ # combobox_speech_language or adding each language to the same
226+ try :
227+ combobox_speech_language .disconnect_by_func (change_speech_language )
228+ except (TypeError ):
229+ pass
230+
231+ combobox_speech_language .clear ()
232+
233+ if (len (self .speech_language_person_dict .keys ()) == 0 ):
234+ combobox_speech_language .add_item (_ ("Default" ))
235+ self .speech_language = 0
236+ else :
237+ for item in self .speech_language_person_dict .keys ():
238+ combobox_speech_language .add_item (item )
239+
240+ combobox_speech_language .connect_change_callback_function (change_speech_language )
241+
242+
243+ if (self .speech_language < len (self .speech_language_person_dict .keys ())):
244+ combobox_speech_language .set_active (self .speech_language )
245+ else :
246+ combobox_speech_language .set_active (0 )
247+ self .speech_language = 0
248+
249+ def change_speech_language (* data ):
250+ combobox_speech_person .clear ()
251+
252+ # For users having preferences from old version
253+ if (self .speech_person == - 1 ):
254+ self .speech_person = 0
255+
256+ if (len (list (self .speech_language_person_dict .keys ())) == 0 ):
257+ combobox_speech_person .add_item (_ ("Default" ))
258+ combobox_speech_person .set_active (0 )
259+ self .speech_person = 0
260+ return
261+
262+ index_language = combobox_speech_language .get_active ()
263+ language = list (self .speech_language_person_dict .keys ())[index_language ]
264+
265+ for item in self .speech_language_person_dict [language ]:
266+ combobox_speech_person .add_item (item )
267+
268+ if (self .speech_person >= len (self .speech_language_person_dict [language ])):
269+ self .speech_person = 0
270+ combobox_speech_person .set_active (self .speech_person )
193271
194272 def change_mode_of_rotation (* data ):
195273 if (combobox_mode_of_rotation .get_active () == 2 ):
@@ -236,10 +314,14 @@ def change_mode_of_rotation(*data):
236314
237315 label_speech_language = widget .Label (_ ("Speech Language" ))
238316 combobox_speech_language = widget .ComboBox ()
239- combobox_speech_module .set_active (self .speech_module )
240- combobox_speech_language .set_active (self .speech_language )
241317 label_speech_language .set_mnemonic_widget (combobox_speech_language )
242318
319+ label_speech_person = widget .Label (_ ("Speech Person" ))
320+ combobox_speech_person = widget .ComboBox ()
321+ label_speech_person .set_mnemonic_widget (combobox_speech_person )
322+
323+ combobox_speech_module .set_active (self .speech_module )
324+
243325 label_speech_rate = widget .Label (_ ("Speech Rate" ))
244326 spin_speech_rate = widget .SpinButton (self .speech_rate ,- 100 ,100 ,1 ,10 ,0 )
245327 label_speech_rate .set_mnemonic_widget (spin_speech_rate )
@@ -259,6 +341,7 @@ def change_mode_of_rotation(*data):
259341 (label_highlight_background ,1 ,1 ),(colorbutton_highlight_background ,1 ,1 ),containers .Grid .NEW_ROW ,
260342 (label_speech_module ,1 ,1 ),(combobox_speech_module ,1 ,1 ),containers .Grid .NEW_ROW ,
261343 (label_speech_language ,1 ,1 ),(combobox_speech_language ,1 ,1 ),containers .Grid .NEW_ROW ,
344+ (label_speech_person ,1 ,1 ),(combobox_speech_person ,1 ,1 ),containers .Grid .NEW_ROW ,
262345 (label_speech_rate ,1 ,1 ),(spin_speech_rate ,1 ,1 ),containers .Grid .NEW_ROW ,
263346 (label_speech_pitch ,1 ,1 ),(spin_speech_pitch ,1 ,1 ),containers .Grid .NEW_ROW ,
264347 (label_speech_volume ,1 ,1 ),(spin_speech_volume ,1 ,1 )])
@@ -457,6 +540,7 @@ def change_mode_of_rotation(*data):
457540 self .language_3 = combobox_language_3 .get_active ()
458541 self .speech_module = combobox_speech_module .get_active ()
459542 self .speech_language = combobox_speech_language .get_active ()
543+ self .speech_person = combobox_speech_person .get_active ()
460544 self .speech_rate = spin_speech_rate .get_value ()
461545 self .speech_pitch = spin_speech_pitch .get_value ()
462546 self .speech_volume = spin_speech_volume .get_value ()
0 commit comments