SAPI引擎一次只能从一个应用程序渲染TTS(我已经使用Windows SDK TTSApplication示例的两个实例运行测试来验证这一点)。我正在编写一个应用程序,我需要检测TTS引擎当前是否正在发言(即在单独的应用程序的控制下,而不是我的)。
有谁知道我怎样才能以编程方式(在C ++中)检测SAPI TTS引擎忙/准备状态?我尝试过使用ISpVoice :: GetStatus(),但这似乎只适用于我自己的应用程序中的任何TTS活动。
感谢。
答案 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 强> 语音实例目前声称有音频。