Pyttsx3 runAndWait()方法被卡住

时间:2019-05-08 00:29:23

标签: python

我正在尝试使用pyttsx3模块在python中创建虚拟助手。问题在于,我使用pyttsx3的语音(音频)方法只能讲话一次,即使我不得不多次讲话,在执行第一个命令后它仍然保持沉默。

事实是,我一直在互联网上浏览,似乎没有人遇到与我所遇到的问题类似的问题,而且我有点发疯了。我已经看到模块未正确安装或某种东西是否出现问题,但似乎一切正常。我正在使用Python 3.7版本,Pycharm IDE,Pyttsx3最新版本和Windows10。

我附上了代码,看看您是否知道为什么。我已经搜索了互联网,但似乎没有人遇到这个问题,因此我想这可能是我的代码中有一些错误。输出为计算机:您好,先生,我是您的数字助手LARVIS,贾维斯夫人!答案也应该打印下一行:

import pyttsx3

engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[len(voices) - 2].id)


def speak(audio):
    print('Computer: ' + audio)
    engine.say(audio)
    engine.runAndWait()

if __name__ == '__main__':
    speak('Hello Sir, I am your digital assistant LARVIS the Lady Jarvis!')
    speak('How may I help you?')

3 个答案:

答案 0 :(得分:0)

我也遇到了这个问题(也正在运行python 3.7)。这不是最好的实现,但是如果我将引擎初始化放在我的语音函数中,那么我的工作就可以了,这样每次说话时它都会重新初始化。

答案 1 :(得分:0)

我认为您应该使用pip install pyaudio安装pyaudio模块。我遇到了类似的问题,但是在安装pyaudio模块后它工作正常。

答案 2 :(得分:0)

要解决此问题:

  1. 为pyttsx3创建一个类;
  2. 创建该类的实例,将文本发送给它,然后对它进行del()。
  3. 重复步骤2几次。

课程:

import pyttsx3

class _TTS:

    engine = None
    rate = None
    def __init__(self):
        self.engine = pyttsx3.init()


    def start(self,text_):
        self.engine.say(text_)
        self.engine.runAndWait()

实例:

 tts = _TTS()
 tts.start("text")
 del(tts)