【问题标题】:Microsoft Speech API (SAPI) SpVoice A Way for a Stop functionMicrosoft Speech API (SAPI) SpVoice 一种停止功能的方法
【发布时间】:2012-04-30 18:09:48
【问题描述】:

我正在使用 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 附带的任何其他接口或类来停止语音中间句子?

谢谢。

【问题讨论】:

    标签: c# com text-to-speech


    【解决方案1】:

    要停止 Speech 而不必处理异常,请在 SpVoice 上使用 Skip 方法。文档here

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

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

    【讨论】:

      【解决方案2】:

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

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

      Speaker.Pause();

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        相关资源
        最近更新 更多