我知道 TTS 系统会在句点 (.) 或逗号 (,) 处暂停。但是我怎样才能让它暂停更长的时间呢?例如,在问答场景中,我希望语音朗读问题并暂停片刻,以便听众可以在脑海中回答问题,然后语音朗读答案。
我尝试将一系列句点串在一起,但它们似乎在 TTS 中合并为一个,以便它们有效地暂停与单个句点相同的长度(Linux 上的节日没有这样做,但在 Windows SAPI 上似乎这样做)。
我可以使用某些字符或字符序列来获得更长的停顿吗?或者另一种实现这一目标的方法?
我知道 TTS 系统会在句点 (.) 或逗号 (,) 处暂停。但是我怎样才能让它暂停更长的时间呢?例如,在问答场景中,我希望语音朗读问题并暂停片刻,以便听众可以在脑海中回答问题,然后语音朗读答案。
我尝试将一系列句点串在一起,但它们似乎在 TTS 中合并为一个,以便它们有效地暂停与单个句点相同的长度(Linux 上的节日没有这样做,但在 Windows SAPI 上似乎这样做)。
我可以使用某些字符或字符序列来获得更长的停顿吗?或者另一种实现这一目标的方法?
人物不行。使用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));
}