在SAPI5中使用文本对语音时,是否可以扩大口语之间的差距?
问题是,特别是在某些声音中,这些词几乎是相互连接的,这使得讲话更难理解。
我使用python和pyTTS模块(在windows上,因为它使用SAPI)
我试图钩住OnWord事件并添加time.sleep()或tts.Pause(),但很明显,即使所有事件都被捕获,它们也只是在口语文本的末尾被处理,无论我使用的是sync还是async标志。
在这个非工作示例中,sleep()方法仅在语句被说出后执行:
tts = pyTTS.Create()
def f(x):
tts.Pause()
sleep(0.5)
tts.Resume()
tts.OnWord = f
tts.Speak(text)
编辑:--接受的解决方案
我的实际答案是
用逗号替换每个空格(如@Dawson所述),例如
text=text.replace(“,”,“)
这就有了一个合理的停顿。我并没有比上面提到的更多地研究暂停方法,因为“我对公认的解决方案感到满意。
我以前用.netapi做过一些TTS工作。System.Speech.Synthesis命名空间中有一个名为PromptBreak的枚举,该枚举对于所需的暂停/中断的长度有不同的值:http://msdn.microsoft.com/en-us/library/system.speech.synthesis.promptbreak.aspx
不知道它是否/如何与PyTTS一起使用,但也许这是一个起点。
我这里没有什么好的解决办法。但是:
PyTTS上一次发布是在2007年,似乎没有文档。同样的人现在维护一个名为pyttsx的跨平台库,它也支持SAPI。它有每分钟字数设置,但没有设置来增加字数之间的停顿。这很可能是因为两个词之间根本没有停顿。
你可以通过让每个词都有自己的“话语”来插入一个长的停顿。
而不是
但那可能太长了。除此之外,您可能需要包装SAPI驱动程序或对其进行子类化,但我也不能百分之百地确定这是否可行。人们在两个词之间没有停顿,所以我不确定语音引擎本身是否支持它。
你说的是语速,对吧? http://msdn.microsoft.com/en-us/library/ms990078.aspx
Pause()我相信,它的工作原理很像普通语音模式中的逗号…除了你决定长度(自然还是不自然)。
相关问题 更多 >
编程相关推荐