0

我只是在 Python 中创建一个聊天机器人。它运行良好,但我想将 pyttsx 添加到这个聊天机器人中,以便它可以说出它的输出。我的代码是

import aiml
import sys
import pyttsx

engine = pyttsx.init()

# Create a Kernel object.
kern = aiml.Kernel()

brainLoaded = False
forceReload = False
while not brainLoaded:
    if forceReload or (len(sys.argv) >= 2 and sys.argv[1] == "reload"):
        kern.bootstrap(learnFiles="std-startup.xml", commands="load aiml b")
        brainLoaded = True
        kern.saveBrain("standard.brn")
    else:
         try:

            kern.bootstrap(brainFile = "standard.brn")
            brainLoaded = True
        except:
            forceReload = True


print "\nINTERACTIVE MODE (ctrl-c to exit)"
while(True):

    hea = kern.respond(raw_input("> "))

    print hea
    engine.say (hea)

engine.runAndWait()

当我运行此代码时,我没有听到任何声音,但我可以在终端上看到聊天。我也想让它说出回应。我究竟做错了什么?

4

1 回答 1

1

engine.runAndWait 在 while(True): 循环之外,因此在循环中断之前不太可能播放。

如果将它移到循环中,并且声音不连贯,请测试以下代码:

import pyttsx
engine = pyttsx.init()
engine.say("Oh, hello!")

我对 pyttsx 的经验是它需要输入少量的文本,否则文本会被打断。我不确定为什么会这样,但是自己截断句子并说几个短语应该适合您的目的:

engine.say("It's nice to meet you.")
engine.say("I hope you are doing well.")
engine.say("Would you like to join us ")
engine.say ("tomorrow at eight for dinner?")

但是您需要解析文本并以保持消息完整的方式截断它。

于 2016-07-05T05:24:03.870 回答