0

我有一个短语列表,我想知道每个短语以给定的速率动态地花费多长时间,这样我就可以在一段时间内将它们均匀分布。

我目前正在利用started-utterancefinished-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)
4

1 回答 1

1

API 文档中没有任何具体内容可以直接回答您。但是,这是一个应该有效的测试。

Pyttsx 允许您以每分钟单词数为单位设置引擎的语速。此外,您可以轻松编写一个简短的 Python 脚本来查看一个单词/短语包含多少个音节。

我建议你设置语速,然后看看固定数量的音节是否花费相同的时间,而不管引擎给出什么短语来说话。一旦你这样做了,如果你知道它有多少个音节,你就可以“估计”一个特定的短语可能需要多长时间。

于 2016-12-29T23:04:34.020 回答