pyttsx - цикл отключает runAndWait()

Я хочу написать скрипт, который будет читать список слов по мере их вывода на экран.

import pyttsx

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

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

Однако при выполнении вышеизложенного все слова, кроме "здесь", обрезаются. Я слышу что-то вроде "здесь [пауза] ar- soto- wo-"

Если я делаю отступ engine.runAndWait()слова произносятся после завершения цикла. Когда я делаю это, они не обрезаются, но, конечно, они не сообщаются в то же время, когда их печатают.

Я использую Ubuntu 14.04.2

1 ответ

Решение

Что вы хотите, чтобы напечатать слово, как об использовании обратного вызова, используя 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()

Это на пару лет поздно, но с использованием 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()
Другие вопросы по тегам