2

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

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

谢谢。

4

3 回答 3

3

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

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

于 2011-02-18T22:45:00.660 回答
0

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

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

于 2009-10-23T15:41:39.343 回答
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 语音实例当前拥有音频声明。

于 2012-10-31T21:43:17.233 回答