Можно ли сделать вывод, сколько времени займет фраза, чтобы говорить в pyttsx?
У меня есть список фраз, и я хочу знать, сколько времени каждая фраза займет с заданной скоростью, динамически, чтобы я мог распределить их равномерно в течение некоторого периода времени.
Я сейчас использую 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)
1 ответ
В документации API нет ничего конкретного, чтобы ответить вам напрямую. Тем не менее, вот тест, который должен работать.
Pyttsx позволяет вам установить скорость речи двигателя в словах в минуту. Кроме того, вы можете легко написать короткий скрипт на Python, чтобы увидеть, сколько слогов содержит слово / фраза.
Я предлагаю вам установить скорость речи, а затем посмотреть, занимает ли постоянное количество слогов одинаковое количество времени, независимо от того, какую фразу произносит движок. Сделав это, вы сможете "оценить", сколько времени может занять конкретная фраза, если вы знаете, сколько у нее слогов.