如何检测SAPI TTS引擎何时忙碌

时间:2009-03-24 04:17:07

标签: text-to-speech sapi

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

有谁知道我怎样才能以编程方式(在C ++中)检测SAPI TTS引擎忙/准备状态?我尝试过使用ISpVoice :: GetStatus(),但这似乎只适用于我自己的应用程序中的任何TTS活动。

感谢。

3 个答案:

答案 0 :(得分:2)

这是了解语音合成系统是否正在讲话的解决方案。

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."

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

来自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     语音实例目前声称有音频。