如何延长文字转语音之间的暂停(pyTTS或SAPI5)

时间:2010-11-13 12:43:28

标签: python accessibility text-to-speech sapi

使用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)

修改: - 已接受的解决方案

我的实际答案是

  • 用自己的“说话”命令说出每个单词,(由@Lennart Regebro建议)或
  • 用逗号代替每个空格(如@Dawson所述),例如

    text = text.replace(“”,“,”)

设置合理的暂停。我之前没有提到Pause方法的研究,因为'我对接受的解决方案感到满意。

3 个答案:

答案 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一起使用,但也许它是一个起点。