为什么说话后我的代码卡住了?

问题描述

我尝试在python3上创建语音助手

这是我的功能(使用pyttsx):

def speak(what):
    print("Gosha: " + what)
    speak_engine.say( what )
    speak_engine.runAndWait()
    speak_engine.stop()

在主体上可以正常工作,但是在 execute_cmd 函数中,在函数之后,我的代码卡住了。 execute_cmd 的一部分:

def execute_cmd(cmd,voice):
    global finished
    finished = False
    #import debug
    if cmd == 'ctime':
        Now = datetime.datetime.Now()
        hours = str(Now.hour)
        minutes = str(Now.minute)
        if (Now.minute < 10): minutes = '0' + minutes
        speak("Now " + hours + ":" + minutes)
        finished = True

完成永远不会正确

这发生在函数中的任何地方

请帮助我

(对不起,我来自俄罗斯)

UPD:我调试了代码并注意到,我的代码卡在 speak_engine.runAndWait()

我知道,很多人都有相同的问题,但是他们的解决方案并没有帮助我

解决方法

我不确定我是否理解您的问题。代码被“卡住”是什么意思?因为您说过finished变量永远不会是False,所以我假设代码一直运行并且不会卡住。我最好的猜测是您的代码根本不会发出声音。

如果是这样,我可以想象是由于先前的循环仍处于活动状态。因此,也许尝试将以下内容添加到您的talk()函数中:

ef speak(what):
    print("Gosha: " + what)
    try:
        speak_engine.endLoop()
    except Exception as e:
        pass
    speak_engine.say( what )
    speak_engine.runAndWait()
    speak_engine.stop()