@@ -57,22 +57,23 @@ class VoiceManager(object):
57
57
58
58
@classmethod
59
59
def ready (cls ):
60
- result = False
61
- for item in cls .voice_class .values ():
62
- result |= item .ready ()
63
- return result
60
+ return True
64
61
65
62
def __init__ (self ):
66
63
self .lock = threading .Lock ()
67
64
65
+ self .activeEngines = [key for key , value in config .conf ["WorldVoice" ]["engine" ].items () if value ]
68
66
self .installEngine = []
69
- for item in self .voice_class .values ():
67
+ for key in self .activeEngines :
68
+ try :
69
+ item = self .voice_class [key ]
70
+ except BaseException as e :
71
+ continue
70
72
if item .ready ():
71
73
try :
72
74
item .engineOn (self .lock )
73
75
self .installEngine .append (item )
74
76
except BaseException as e :
75
- print (e )
76
77
pass
77
78
78
79
self ._setVoiceDatas ()
@@ -90,8 +91,6 @@ def __init__(self):
90
91
config .conf ["WorldVoice" ]["engine" ]["SAPI5" ] = True
91
92
item = self .table [0 ]
92
93
93
- self .activeEngines = [key for key , value in config .conf ["WorldVoice" ]["engine" ].items () if value ]
94
-
95
94
defaultVoiceName = item ["name" ]
96
95
self ._defaultVoiceInstance = self .getVoiceInstance (defaultVoiceName )
97
96
self ._defaultVoiceInstance .loadParameter ()
@@ -179,7 +178,7 @@ def onKeepEngineConsistent(self):
179
178
180
179
for localelo , data in config .conf ["WorldVoice" ]['speechRole' ].items ():
181
180
if isinstance (data , config .AggregatedSection ):
182
- if (localelo not in self .localeToVoicesMapEngineFilter ) or ('voice' in data and data ['voice' ] not in self .localeToVoicesMapEngineFilter [localelo ]):
181
+ if (localelo not in self .localeToVoicesMap ) or ('voice' in data and data ['voice' ] not in self .localeToVoicesMap [localelo ]):
183
182
try :
184
183
del temp [localelo ]
185
184
except BaseException :
@@ -225,7 +224,7 @@ def _setVoiceDatas(self):
225
224
for item in self .installEngine :
226
225
self .table .extend (item .voices ())
227
226
self .table = sorted (self .table , key = lambda item : (item ['engine' ], item ['language' ], item ['name' ]))
228
- self .table = list (filter (lambda item : item ['engine' ] in [ key for key , value in config . conf [ "WorldVoice" ][ "engine" ]. items () if value ] , self .table ))
227
+ self .table = list (filter (lambda item : item ['engine' ] in self . activeEngines , self .table ))
229
228
230
229
self ._localesToVoices = {
231
230
** groupByField (self .table , 'locale' , lambda i : i , lambda i : i ['name' ]),
@@ -244,44 +243,15 @@ def _setVoiceDatas(self):
244
243
# Kepp a list with existing voices in VoiceInfo objects.
245
244
self ._voiceInfos = OrderedDict ([(v .id , v ) for v in voiceInfos ])
246
245
247
- def _setVoiceDatasEngineFilter (self ):
248
- self .tableEngineFilter = []
249
- for item in self .voice_class .values ():
250
- self .tableEngineFilter .extend (item .voices ())
251
- self .tableEngineFilter = sorted (self .tableEngineFilter , key = lambda item : (item ['engine' ], item ['language' ], item ['name' ]))
252
- self .tableEngineFilter = list (filter (lambda item : item ['engine' ] in self .engines , self .tableEngineFilter ))
253
-
254
- self ._localesToVoicesEngineFilter = {
255
- ** groupByField (self .tableEngineFilter , 'locale' , lambda i : i , lambda i : i ['name' ]),
256
- # For locales with no country (i.g. "en") use all voices from all sub-locales
257
- ** groupByField (self .tableEngineFilter , 'locale' , lambda i : i .split ('_' )[0 ], lambda i : i ['name' ]),
258
- }
259
-
260
- self ._voicesToEnginesEngineFilter = {}
261
- for item in self .tableEngineFilter :
262
- self ._voicesToEnginesEngineFilter [item ["name" ]] = item ["engine" ]
263
-
264
- voiceInfos = []
265
- for item in self .tableEngineFilter :
266
- voiceInfos .append (VoiceInfo (item ["name" ], item ["description" ], item ["language" ]))
267
-
268
- # Kepp a list with existing voices in VoiceInfo objects.
269
- self ._voiceInfosEngineFilter = OrderedDict ([(v .id , v ) for v in voiceInfos ])
270
-
271
246
@property
272
247
def activeEngines (self ):
273
248
return self ._activeEngines
274
249
275
250
@activeEngines .setter
276
251
def activeEngines (self , value ):
277
- if not set (value ).issubset (set (self .voice_class .keys ())):
278
- raise ValueError ("engine setted is not valid" )
252
+ # if not set(value).issubset(set(self.voice_class.keys())):
253
+ # raise ValueError("engine setted is not valid")
279
254
self ._activeEngines = value
280
- self ._setVoiceDatasEngineFilter ()
281
-
282
- @property
283
- def engines (self ):
284
- return self .activeEngines
285
255
286
256
@property
287
257
def voiceInfos (self ):
@@ -299,18 +269,6 @@ def localeToVoicesMap(self):
299
269
def localesToNamesMap (self ):
300
270
return {item : self ._getLocaleReadableName (item ) for item in self ._localesToVoices }
301
271
302
- @property
303
- def languagesEngineFilter (self ):
304
- return sorted ([l for l in self ._localesToVoicesEngineFilter if len (self ._localesToVoicesEngineFilter [l ]) > 0 ])
305
-
306
- @property
307
- def localeToVoicesMapEngineFilter (self ):
308
- return self ._localesToVoicesEngineFilter .copy ()
309
-
310
- @property
311
- def localesToNamesMapEngineFilter (self ):
312
- return {locale : self ._getLocaleReadableName (locale ) for locale in self ._localesToVoicesEngineFilter }
313
-
314
272
def getVoiceNameForLanguage (self , language ):
315
273
configured = self ._getConfiguredVoiceNameForLanguage (language )
316
274
if configured is not None and configured in self .voiceInfos :
0 commit comments