C# Microsoft语音API(SAPI)SpVoice是一种停止功能的方法

C# Microsoft语音API(SAPI)SpVoice是一种停止功能的方法,c#,com,text-to-speech,C#,Com,Text To Speech,我正在使用微软的语音平台运行时,我正在使用SpVoice界面使运行时说出我想要的句子 为了在句子中间停止讲话,我创建了这样的函数 public void StopSpeak() { try { Speaker.Speak("", SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak); } catch (COMException ex) { } } 但是,当我在语音平台说话时运行此命令时,会出现以下c

我正在使用微软的语音平台运行时,我正在使用
SpVoice
界面使运行时说出我想要的句子

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

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

    }
}
但是,当我在语音平台说话时运行此命令时,会出现以下com错误:

Exception from HRESULT: 0x80045006
我通过微软查到它,这意味着wave设备正忙,我现在意识到每次语音平台忙着说一句话时,我都会遇到这个错误

使用SpVoice或speech Platform运行时附带的任何其他接口或类,是否有其他方法停止语音中间语句


谢谢。

要停止讲话而不必处理异常,请使用
SpVoice
上的
Skip
方法。文件

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

public void StopSpeak()
{
    Speaker.Skip("Sentence", int.MaxValue);
}

首先,您必须将SpeechVoiceSpeakFlags设置为Asynchronous 1。这样你就可以减少说话的句点或标点。通过暂停法

Speaker.Speak(“此处为长文本”,SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync)

演讲者暂停()

但它会再次完成它开始阅读的句子,然后如果有标点符号,它会停止。因此,没有削减序列

一种苛刻的做法是将其设置为空; 扬声器=空; 恢复后,您必须重新设置它,包括停止的位置和继续的位置