我基本上希望 tts 在打印出它所说的内容时说话。我几乎复制并粘贴了 pyttsx3 文档来执行此操作,但它不起作用。
import pyttsx3
def onStart(name):
print ('starting', name)
def onWord(name, location, length):
print ('word', name, location, length)
def onEnd(name, completed):
print ('finishing', name, completed)
engine = pyttsx3.init()
engine.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
结果就是这样。单词事件仅在讲话完成后触发,并且没有实际打印任何单词。
starting None
word None 1 0
finishing None True
我已经为此工作了好几天,我尝试了其他库,如 win32com.client.Dispatch('SAPI.Spvoice') 和 gtts,但似乎没有一个能够做我想要的。Sapi.spvoice 似乎有一个事件可以做我想要的,但我似乎也无法让它工作。虽然我也不确定我做得是否正确。https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms723593(v=vs.85)
from win32com.client import Dispatch
import win32com.client
class ContextEvents():
def onWord():
print("the word event occured")
# Work with Result
s = Dispatch('SAPI.Spvoice')
e = win32com.client.WithEvents(s, ContextEvents)
s.Speak('The quick brown fox jumped over the lazy dog.')
据我了解,需要有一个事件类,并且事件必须在该类中以 On(event) 的形式出现。或者其他的东西。我尝试安装 espeak,但也没有成功。保持头脑清醒,我有点像python中的新手,所以如果有人愿意给出一个彻底的解释,那就太好了。