【问题标题】:How to detect when SAPI TTS engine is busy如何检测 SAPI TTS 引擎何时忙碌
【发布时间】:2010-10-15 03:18:57
【问题描述】:

SAPI 引擎一次只能从一个应用程序呈现 TTS(我已使用 Windows SDK TTSApplication 示例的两个实例运行测试以验证这一点)。我正在编写一个应用程序,我需要在其中检测 TTS 引擎当前是否在说话(即在一个单独的应用程序的控制下,而不是我的)。

有人知道如何以编程方式(在 C++ 中)检测 SAPI TTS 引擎繁忙/就绪状态吗?我曾尝试使用 ISpVoice::GetStatus() 但这似乎只适用于我自己的应用程序中的任何 TTS 活动。

谢谢。

【问题讨论】:

    标签: text-to-speech sapi


    【解决方案1】:

    这是知道语音合成系统是否在说话的解决方案。

    ISpVoice *pVoice;

    hr = pVoice->GetStatus(& status, NULL);

    if(status.dwRunningState == SPRS_IS_SPEAKING)

    std::cout<< "The Speech Synthesis System is speaking."

    else

    std::cout<< "The Speech Synthesis System is not speaking."

    【讨论】:

      【解决方案2】:

      例如在 SAPI4 中,IVTxtAttributes::IsSpeaking 检索此类状态(如果引擎当前正在向某些音频设备播放样本)。

      无论如何,IMO 通用 SAPI 引擎不限于一个应用程序。我相信这种行为是特定于“您的引擎”的。

      【讨论】:

        【解决方案3】:

        来自http://msdn.microsoft.com/en-us/library/ee431864%28v=vs.85%29.aspx

        SPRUNSTATE 列出语音运行状态。

        typedef enum SPRUNSTATE
        {
            SPRS_DONE,
            SPRS_IS_SPEAKING
        } SPRUNSTATE;
        

        元素:

        SPRS_DONE 语音已完成处理所有排队的流。 SPRS_IS_SPEAKING 语音实例当前已声明音频。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-30
          • 2013-07-19
          • 1970-01-01
          • 2016-07-22
          相关资源
          最近更新 更多