我知道TTS系统会暂停一段时间(。)或逗号(,)。但是我怎么能让它暂停一段时间呢?例如,在问答情节中,我希望语音能够阅读问题并暂停一下,这样听众就能在心中回答问题,然后语音会回答答案。
我已尝试将一系列句点拼接在一起,但它们似乎在TTS中合并为一个,以便它们有效地暂停与单个句点相同的长度(Linux上的Festival没有这样做,但在Windows上SAPI似乎到)。
我是否可以使用一些字符或字符序列来获得更长的暂停?或者另一种实现这一目标的手段?
答案 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));
}