2016-06-20 79 views
5

我想在許多語言中使用很多聲音進行文本到語音轉換。如何在WPF中立即暫停SpVoice?

我試過SpeechSynthesizer(Ref:System.Speech),但它只允許2個英文聲音。從微軟網站安裝6個英語聲音後,我仍然無法獲得任何其他聲音。

我改爲SpVoice(Ref:Microsoft Speech Object Library)。 SpVoice可以識別我剛安裝的6個聲音。問題是當我撥打spVoice.Pause()時,它總是延遲0.5秒,然後才完全停止說話。我也嘗試爲SpVoice設置AlertBoundary,但它沒有幫助。

SpeechSynthesizer可以立即暫停SpeakAsyncCancelAll,但僅適用於默認語音。

回答

0

基本上,Pause方法會在最近的警報邊界處暫停語音並關閉輸出設備,從而允許其他語音使用該語音。

spVoice.Speak()方法可以同步或異步調用。當同步調用時,該方法直到文本被說出纔會返回;當被異步調用時,它立即返回,並且語音作爲後臺進程講話。我希望你同時撥打spVoice.Speak()。這就是爲什麼你會遇到這個問題。所以用異步方法代替同步,你的問題應該解決。然後spVoice.Pause()會立即暫停。

SpVoice spVoice = new SpVoice(); 
spVoice.Speak ("Testing spVoice",SpeechVoiceSpeakFlags.SVSFlagsAsync); 
//...... 
spVoice.Pause(); 
+0

謝謝。其實,我異步使用spVoice。我不認爲這是一個解決方案。 –