【问题标题】:c# SpeechSynthesizer SpeakCompleted return variablec# SpeechSynthesizer SpeakCompleted 返回变量
【发布时间】:2012-07-11 18:14:23
【问题描述】:

希望有人可以提供帮助! :)

我想要实现的是让 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;
    }

有人有什么建议吗? 谢谢。

【问题讨论】:

  • 您必须在调用异步发言之前设置发言完成事件。

标签: c# speechsynthesizer


【解决方案1】:

不要使用 SpeakAsync 和完成的回调,只需使用阻塞的 Speak 方法。

【讨论】:

  • 感谢阿斯蒂的回复。我不完全确定您的建议是什么。我已将 SpeakAsync 更改为 Speak 并一直在使用它,但它仍然无法满足我的需要。到目前为止,该程序侦听语音识别输入,然后将字符串提供给 Speechlib 以获得 tts 输出。我想暂停听者对象,直到扬声器完成,否则它只会创建一个循环一遍又一遍地说同一个词。
  • private void Reco_Event(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult Result) { objReco.Pause();字符串 strSpeech = Result.PhraseInfo.GetText(0, -1, true); textBox2.Text = strSpeech;语音合成器阅读器;读者=新的语音合成器(); reader.SelectVoice("Acapela Telecom HQ TTS English (US) (Heather 22 kHz)"); reader.Speak(strSpeech); objReco.Resume(); }
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2015-08-17
  • 1970-01-01
相关资源
最近更新 更多