我可以插入一些字符以获得SAPI5 TTS更长时间的停顿吗?

时间:2013-02-05 00:30:31

标签: windows-7 text-to-speech sapi

我知道TTS系统会暂停一段时间(。)或逗号(,)。但是我怎么能让它暂停一段时间呢?例如,在问答情节中,我希望语音能够阅读问题并暂停一下,这样听众就能在心中回答问题,然后语音会回答答案。

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

我是否可以使用一些字符或字符序列来获得更长的暂停?或者另一种实现这一目标的手段?

1 个答案:

答案 0 :(得分:2)

字符不会。使用XML markup更好地控制它,传递SPF_IS_XML标志:

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

或者您可以将SSML document与SPF_PARSE_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));
   }