From aee49f0a5d37e296699c9b8a3aef0cde0c31aa40 Mon Sep 17 00:00:00 2001 From: schneefux Date: Fri, 19 Sep 2014 16:24:00 +0200 Subject: Add better TTS engine detection/testing code --- client/speaker.py | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'client') 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) - - for engine in engines: - print engine.SLUG - engine.say("This is a test.") + 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)) + + 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.") -- cgit v1.3.1