diff --git a/voice/pytts/pytts_voice.py b/voice/pytts/pytts_voice.py index 57d0cfb31..968286cb8 100644 --- a/voice/pytts/pytts_voice.py +++ b/voice/pytts/pytts_voice.py @@ -13,9 +13,9 @@ import os class PyttsVoice(Voice): - engine = pyttsx3.init() def __init__(self): + self.engine = pyttsx3.init() # 语速 self.engine.setProperty("rate", 125) # 音量 @@ -23,25 +23,24 @@ def __init__(self): for voice in self.engine.getProperty("voices"): if "Chinese" in voice.name: self.engine.setProperty("voice", voice.id) - self.engine.setProperty("voice", "zh") + self.engine.startLoop(useDriverLoop=False) def textToVoice(self, text): try: - mp3FileName = "reply-" + str(int(time.time())) + ".mp3" + mp3FileName = "reply-" + str(int(time.time()*100)) + ".mp3" mp3File = TmpDir().path() + mp3FileName - self.engine.save_to_file(text, mp3File) - self.engine.runAndWait() - - # engine.runAndWait() will return before the file created - while mp3FileName not in os.listdir(TmpDir().path()): - time.sleep(0.1) - logger.info( "[Pytts] textToVoice text={} voice file name={}".format(text, mp3File) ) + self.engine.save_to_file(text, mp3File) + self.engine.iterate() + while self.engine.isBusy() or mp3FileName not in os.listdir(TmpDir().path()): + time.sleep(0.1) + logger.debug("[Pytts] Task finished") reply = Reply(ReplyType.VOICE, mp3File) except Exception as e: + print(e) reply = Reply(ReplyType.ERROR, str(e)) finally: return reply