4

使用 SAPI5 使用文本到语音时,是否可以扩大口语之间的差距?

问题是,特别是。有些声音,单词几乎是连在一起的,这使得讲话更难理解。

我正在使用 python 和 pyTTS 模块(在 Windows 上,因为它使用 SAPI)

我试图挂钩 OnWord 事件并添加 time.sleep() 或 tts.Pause(),但显然即使所有事件都被捕获,它们仅在语音文本的末尾被处理,无论我是使用同步或异步标志。

在这个 NON WORKING 示例中,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 方法,因为'我对接受的解决方案很满意。

4

3 回答 3

2

我在这里没有任何好的解决方案。但:

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

您可以通过使每个单词成为自己的“话语”来插入长时间的停顿。

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

代替

engine.say('The quick brown fox."

但这可能太长了。除此之外,您可能必须包装或子类化 SAPI 驱动程序,但我也不能 100% 确定这是否会起作用。人们在单词之间没有停顿,所以我不确定语音引擎本身是否支持它。

于 2011-02-02T13:34:27.333 回答
2

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

Pause() 我相信,它的工作原理很像正常语音模式中的逗号......除了你确定长度(自然与否)。

于 2011-02-08T07:22:12.213 回答
0

我之前使用 .NET API 完成了一些 TTS 工作。System.Speech.Synthesis 命名空间中有一个名为 PromptBreak 的枚举,它具有不同的暂停/中断长度值:http: //msdn.microsoft.com/en-us/library/system.speech。综合.promptbreak.aspx

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

于 2011-02-08T12:44:33.087 回答