使用SAPI5使用文本到语音时是否可以延长口语之间的差距?
问题在于,尤其是有些声音,这些词几乎相互联系,这使得演讲更难以理解。
我正在使用python和pyTTS模块(在Windows上,因为它使用的是SAPI)
我试图挂钩OnWord事件并添加time.sleep()或tts.Pause(),但显然即使捕获了所有事件,它们也仅在语音文本的末尾处理,我正在使用同步或异步标志。
在这个非工作示例中,只有在说出句子后才执行sleep()方法:
tts = pyTTS.Create()
def f(x):
tts.Pause()
sleep(0.5)
tts.Resume()
tts.OnWord = f
tts.Speak(text)
修改: - 已接受的解决方案
我的实际答案是
用逗号代替每个空格(如@Dawson所述),例如
text = text.replace(“”,“,”)
设置合理的暂停。我之前没有提到Pause方法的研究,因为'我对接受的解决方案感到满意。
答案 0 :(得分:2)
我这里没有任何好的解决方案。但是:
PyTTS上一版本是在2007年,似乎没有文档。现在,同一个人维护着一个名为pyttsx的跨平台库,它也支持SAPI。它具有每分钟单词设置,但没有设置来增加单词之间的暂停。这很可能是因为这些词之间根本没有停顿。
您可以通过将每个单词设为自己的“话语”来插入一个长暂停。
engine.say('The')
engine.say('quick')
engine.say('brown')
engine.say('fox.')
而不是
engine.say('The quick brown fox."
但那可能太长。除此之外,你可能需要包装或子类化SAPI驱动程序,但我不是百分之百确定它是否会起作用。人们不会在单词之间停顿,所以我不确定语音引擎本身是否支持它。
答案 1 :(得分:2)
你在谈论语音速率,对吗? http://msdn.microsoft.com/en-us/library/ms990078.aspx
Pause()我相信,在正常的语音模式中,它的功能很像逗号...除了你确定长度(自然或不自然)。
答案 2 :(得分:0)
我之前使用.NET API完成了一些TTS工作。 System.Speech.Synthesis命名空间中有一个名为PromptBreak的枚举,它具有所需暂停/中断长度的不同值:http://msdn.microsoft.com/en-us/library/system.speech.synthesis.promptbreak.aspx
不知道它是否/如何与PyTTS一起使用,但也许它是一个起点。