2012-04-19 93 views
3

我正在使用語音平臺微軟的運行時間,我正在使用SpVoice界面來使運行時間說出我想要的語句。微軟語音API(SAPI)SpVoice停止功能的一種方式

要停止講話中期一句我創建了功能類似這樣的

public void StopSpeak() 
{ 
    try 
    { 
     Speaker.Speak("", SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak); 
    } 
    catch (COMException ex) 
    { 

    } 
} 

但是當我運行此,而語音平臺是講我得到這個COM錯誤:

Exception from HRESULT: 0x80045006 

我看着它這意味着波形設備很忙,我現在意識到,每當語音平臺忙於說一個句子時,我都會聽到這個錯誤。

使用SpVoice或Speech Platform Runtime附帶的任何其他接口或類別,是否有其他方法來停止語音中期句子?

謝謝。

回答

1

要停止演講而不必處理例外情況,請在SpVoice上使用Skip方法。文檔here

這應該工作,因爲它會跳過int.MaxValue句子:

的所有你必須SpeechVoiceSpeakFlags設置爲Asyncronous一個
public void StopSpeak() 
{ 
    Speaker.Skip("Sentence", int.MaxValue); 
} 
0

第一。這樣你就可以減少時間或標點符號的發言。通過暫停方法。

Speaker.Speak(「Long Text Here」,SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync);

Speaker.Pause();

但它會再次完成它開始閱讀的句子,然後它會停在標點符號,如果有任何。所以沒有切割順序。

一個苛刻的方法是將其設置爲空; Speaker = null; aftre簡歷你必須重新設置它,它停在哪裏以及在哪裏繼續。