pyttsx - 循环使runAndWait()被切断

时间:2015-11-11 06:47:57

标签: python ubuntu pyttsx

我想编写一个脚本,在将它们打印到屏幕上时会读取单词列表。

import pyttsx

engine = pyttsx.init()
words = ["here","are","some","test","words"]

for i in words:
    engine.say(i)
    print i
    engine.runAndWait()

然而,在运行上述内容时,除了" here"之外的所有单词被缩短了。我听到类似"这里[暂停] ar- so- te- wo - "

如果我取消engine.runAndWait(),那么在循环完成后会说出这些词。当我这样做时,它们并没有被切断,但是,当然,它们在被打印的同时也没有被说出来。

我正在运行Ubuntu 14.04.2

2 个答案:

答案 0 :(得分:2)

你想要的是打印文字,使用pyttsx.Engine.connect

使用回调怎么样?
import pyttsx


def cb(name):
    print(name)

engine = pyttsx.init()
engine.connect('started-utterance', cb)
for word in ["here", "are", "some", "test", "words"]:
    engine.say(word, name=word)

engine.runAndWait()

答案 1 :(得分:0)

这已经晚了几年,但是在docs中的“外部事件循环”示例之后使用engine.startLoop(False)engine.iterate()为我做了工作。

import pyttsx
import time

engine = pyttsx.init()
words = ["here","are","some","test","words"]

engine.startLoop(False)
for i in words:
    engine.say(i)
    engine.iterate()
    print i
    while engine.isBusy(): # wait until finished talking
        time.sleep(0.1)

engine.endLoop()