1

我知道 TTS 系统会在句点 (.) 或逗号 (,) 处暂停。但是我怎样才能让它暂停更长的时间呢?例如,在问答场景中,我希望语音朗读问题并暂停片刻,以便听众可以在脑海中回答问题,然后语音朗读答案。

我尝试将一系列句点串在一起,但它们似乎在 TTS 中合并为一个,以便它们有效地暂停与单个句点相同的长度(Linux 上的节日没有这样做,但在 Windows SAPI 上似乎这样做)。

我可以使用某些字符或字符序列来获得更长的停顿吗?或者另一种实现这一目标的方法?

4

1 回答 1

3

人物不行。使用XML 标记更好地控制这一点,传递 SPF_IS_XML 标志:

  HRESULT hr = pVoice->Speak(L"Hello <silence msec=\"1000\"/> world", 
                  SPF_IS_XML, NULL );

或者您可以使用带有 SPF_PARSE_SSML 标志的SSML 文档<break>,使用以下元素:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
   Hello<break time="1000ms" />world
</speak>

如果您可以使用 C#,那么 PromptBuilder 类对于构建 SSML 非常方便:

    private SpeechSynthesizer synth = new SpeechSynthesizer();

    private void sayHello() {
        var builder = new PromptBuilder();
        builder.AppendText("Hello");
        builder.AppendBreak(TimeSpan.FromMilliseconds(1000));
        builder.AppendText("world");
        synth.SpeakAsync(new Prompt(builder));
   }
于 2013-02-05T02:15:49.870 回答