如何延长文字转换为语音的单词之间的停顿时间(pyTTS或SAPI5)

2024-05-17 06:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在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)

编辑:--接受的解决方案

我的实际答案是

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

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

这就有了一个合理的停顿。我并没有比上面提到的更多地研究暂停方法,因为“我对公认的解决方案感到满意。


Tags: 方法text文本声音事件语音sleep解决方案
3条回答

我以前用.netapi做过一些TTS工作。System.Speech.Synthesis命名空间中有一个名为PromptBreak的枚举,该枚举对于所需的暂停/中断的长度有不同的值:http://msdn.microsoft.com/en-us/library/system.speech.synthesis.promptbreak.aspx

不知道它是否/如何与PyTTS一起使用,但也许这是一个起点。

我这里没有什么好的解决办法。但是:

PyTTS上一次发布是在2007年,似乎没有文档。同样的人现在维护一个名为pyttsx的跨平台库,它也支持SAPI。它有每分钟字数设置,但没有设置来增加字数之间的停顿。这很可能是因为两个词之间根本没有停顿。

你可以通过让每个词都有自己的“话语”来插入一个长的停顿。

engine.say('The')
engine.say('quick')
engine.say('brown')
engine.say('fox.')

而不是

engine.say('The quick brown fox."

但那可能太长了。除此之外,您可能需要包装SAPI驱动程序或对其进行子类化,但我也不能百分之百地确定这是否可行。人们在两个词之间没有停顿,所以我不确定语音引擎本身是否支持它。

你说的是语速,对吧? http://msdn.microsoft.com/en-us/library/ms990078.aspx

Pause()我相信,它的工作原理很像普通语音模式中的逗号…除了你决定长度(自然还是不自然)。

相关问题 更多 >