2012-07-11 88 views
1

希望有人能幫助! :)c#SpeechSynthesizer SpeakCompleted返回變量

我想要實現的是當reader_Speak()方法完成說話時返回true。與舊的SpeechLib的WaitUntilDone類似。

這裏是代碼我有: -

public void reader_Speak(string strSpeech) 
    { 
     reader = new SpeechSynthesizer(); 
     reader.SpeakAsync(strSpeech); 
     reader.SpeakCompleted += new EventHandler<SpeakCompletedEventArgs>(reader_SpeakCompleted); 
    } 

    private void reader_SpeakCompleted(object sender, SpeakCompletedEventArgs e) 
    { 
     reader.Dispose(); 
    } 

這裏是我想要的東西: -

public bool reader_Speak(string strSpeech) 
    { 
     reader = new SpeechSynthesizer(); 
     reader.SpeakAsync(strSpeech); 
     reader.waituntildone(); 
     return true; 
    } 

任何人有什麼建議? 謝謝。

+0

在您打電話說異步之前,您必須設置說完成事件。 – Margus 2016-03-26 16:24:21

回答

2

而不是使用SpeakAsync和完成的回調,只需使用阻止的Speak方法。

+0

感謝您的回覆阿斯蒂。我不完全確定你的建議。我已經將SpeakAsync改爲Speak,並且一直在玩它,但它仍然沒有做到我所需要的。到目前爲止,程序監聽語音識別輸入,然後將字符串提供給speechlib以輸出tts。我想暫停偵聽器對象,直到說話者完成,否則它只是創建一個循環,一遍又一遍地說同一個單詞。 – luigivampa 2012-07-12 12:23:45

+0

private void Reco_Event(int StreamNumber,object StreamPosition,SpeechRecognitionType RecognitionType,ISpeechRecoResult Result) { objReco.Pause(); string strSpeech = Result.PhraseInfo.GetText(0,-1,true); textBox2.Text = strSpeech; SpeechSynthesizer閱讀器; reader = new SpeechSynthesizer(); reader.SelectVoice(「Acapela Telecom HQ TTS English(US)(Heather 22 kHz)」);讀者。(SpeSpeech); objReco.Resume(); } – luigivampa 2012-07-12 12:24:20

+0

http://pastie.org/4243517更好!有任何想法嗎? :) – luigivampa 2012-07-12 12:25:44