summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-09-19 16:24:00 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2014-09-26 13:34:47 +0200
commitaee49f0a5d37e296699c9b8a3aef0cde0c31aa40 (patch)
tree5bbed08f242d907c7a26e0693c4be3a555ee50ba
parent3970fabe28e60d5e944de9cdeffe5ff6ab0e55ea (diff)
downloadjasper-client-aee49f0a5d37e296699c9b8a3aef0cde0c31aa40.tar.gz
jasper-client-aee49f0a5d37e296699c9b8a3aef0cde0c31aa40.zip
Add better TTS engine detection/testing code
-rw-r--r--client/speaker.py36
1 files changed, 27 insertions, 9 deletions
diff --git a/client/speaker.py b/client/speaker.py
index d89313f..bcf3702 100644
--- a/client/speaker.py
+++ b/client/speaker.py
@@ -221,14 +221,32 @@ def newSpeaker():
raise ValueError("TTS engine '%s' is not available (due to missing dependencies, missing dependencies, etc.)" % tts_engine)
return engine()
+def get_engines():
+ def get_subclasses(cls):
+ subclasses = set()
+ for subclass in cls.__subclasses__():
+ subclasses.add(subclass)
+ subclasses.update(get_subclasses(subclass))
+ return subclasses
+ return [tts_engine for tts_engine in list(get_subclasses(AbstractSpeaker)) if hasattr(tts_engine, 'SLUG') and tts_engine.SLUG]
+
if __name__ == '__main__':
- engines = []
- for engine in AbstractSpeaker.__subclasses__():
- if hasattr(engine, 'SLUG'):
- instance = engine()
- if instance.is_available():
- engines.append(instance)
+ engines = get_engines()
+ available_engines = []
+ for engine in get_engines():
+ if engine.is_available():
+ available_engines.append(engine)
+ print("Available TTS engines:")
+ for i, engine in enumerate(available_engines, start=1):
+ print("%d. %s" % (i, engine.SLUG))
+
+ print("")
+ print("Disabled TTS engines:")
+ for i, engine in enumerate(list(set(engines).difference(set(available_engines))), start=1):
+ print("%d. %s" % (i, engine.SLUG))
- for engine in engines:
- print engine.SLUG
- engine.say("This is a test.")
+ print("")
+ for i, engine in enumerate(available_engines, start=1):
+ print("%d. Testing engine '%s'..." % (i, engine.SLUG))
+ engine().say("This is a test.")
+ print("Done.")