2013-02-05 86 views
0

我知道TTS系統會暫停(。)或逗號(,)。但是我怎樣才能讓它暫停一段較長的時間?例如,在問答場景中,我希望語音讀取問題並暫停一會兒,以便聽者可以在腦海中精神地回答問題,然後語音讀取答案。有一些我可以用SAPI5 TTS獲得更長暫停的字符嗎?

我已經嘗試串起一系列的時期,但他們似乎在TTS中整合到一個,使他們有效地暫停相同的長度作爲一個單一的時期(節日在Linux沒有這樣做,但在Windows的SAPI好像)。

有一些字符或字符序列可以用來獲得更長的暫停嗎?或者換一種方式來實現這一目標?

回答

1

字符不會。使用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 class非常方便建立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)); 
    } 
相關問題