我有一个短语列表,我想知道每个短语动态地以给定的速率运行多长时间,所以我可以在一段时间内均匀地分散它们。
我目前正在利用started-utterance
和finished-utterance
来计时,说出每个短语并记录需要多长时间。当然,这样做的缺点是我必须在应用程序加载时说出每个短语,或者在加载并将结果保存到磁盘之前执行此操作,如果短语列表发生更改,这将无效。
import pyttsx
from datetime import datetime
import time
phrases = ['long sentence', 'medium sentence', 'short sentence', 'word']
phrase_lengths = {phrase: 0 for phrase in phrases}
start_time = None
end_time = None
def onStart(name):
global start_time
start_time = datetime.now()
def onEnd(name, completed):
global start_time
global end_time
end_time = datetime.now()
print name, "took", end_time - start_time
phrase_lengths[name] = end_time - start_time
engine = pyttsx.init()
engine.connect('started-utterance', onStart)
engine.connect('finished-utterance', onEnd)
def speak(engine, rate, phrase):
engine.setProperty('rate', rate)
engine.say(p, p)
engine.runAndWait()
for phrase in phrases:
speak(engine, 120, phrase)
time.sleep(3.0)
答案 0 :(得分:1)
API文档中没有任何具体内容可以直接回答您的问题。但是,这是一个应该有效的测试。
Pyttsx允许您以每分钟的单词设置引擎的语速。此外,您可以轻松编写一个简短的Python脚本,以查看单词/短语包含多少个音节。
我建议您设置语速,然后查看恒定数量的音节是否花费相同的时间,而不管发动机说的是什么短语。一旦你这样做,你将能够“估计”如果你知道它有多少音节,一个特定的短语可以说多长时间。