7

我正在使用 Microsoft 的 Speech Platform Run time,我正在使用SpVoice界面让运行时说出我想要的句子。

为了停止演讲中的句子,我创建了这样的函数

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

    }
}

但是当我在语音平台说话时运行它时,我得到了这个 com 错误:

Exception from HRESULT: 0x80045006

我通过微软查了一下,这意味着 wave 设备很忙,我现在意识到每次语音平台忙于说一个句子时我都会收到这个错误。

是否有其他方法可以使用 SpVoice 或 Speech Platform Runtime 附带的任何其他接口或类来停止语音中间句子?

谢谢。

4

2 回答 2

6

要停止 Speech 而不必处理异常,请使用Skipon 方法SpVoice。文档在这里

这应该有效,因为它会跳过int.MaxValue句子:

public void StopSpeak()
{
    Speaker.Skip("Sentence", int.MaxValue);
}
于 2012-10-04T19:17:35.620 回答
0

首先,您必须将 SpeechVoiceSpeakFlags 设置为 Asyncronous。这样你就可以减少句号或标点符号的发言。通过暂停方法。

Speaker.Speak("这里有长文本", SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync);

扬声器.Pause();

但它会再次完成它开始阅读的句子,然后如果有标点符号,它将停止。所以没有切割序列。

一种苛刻的方法是将其设置为 null ;扬声器=空;恢复后,您必须再次设置它,它停止的位置和继续的位置。

于 2016-12-07T07:46:13.263 回答