SAPI 引擎一次只能从一个应用程序呈现 TTS(我已使用 Windows SDK TTSApplication 示例的两个实例运行测试以验证这一点)。我正在编写一个应用程序,我需要在其中检测 TTS 引擎当前是否在说话(即在一个单独的应用程序的控制下,而不是我的)。
有谁知道请我如何以编程方式(在 C++ 中)检测 SAPI TTS 引擎繁忙/就绪状态?我曾尝试使用 ISpVoice::GetStatus() 但这似乎只适用于我自己的应用程序中的任何 TTS 活动。
谢谢。
SAPI 引擎一次只能从一个应用程序呈现 TTS(我已使用 Windows SDK TTSApplication 示例的两个实例运行测试以验证这一点)。我正在编写一个应用程序,我需要在其中检测 TTS 引擎当前是否在说话(即在一个单独的应用程序的控制下,而不是我的)。
有谁知道请我如何以编程方式(在 C++ 中)检测 SAPI TTS 引擎繁忙/就绪状态?我曾尝试使用 ISpVoice::GetStatus() 但这似乎只适用于我自己的应用程序中的任何 TTS 活动。
谢谢。
这是了解语音合成系统是否在说话的解决方案。
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."
例如在 SAPI4 中,IVTxtAttributes::IsSpeaking 检索此类状态(如果引擎当前正在向某些音频设备播放样本)。
无论如何,IMO 通用 SAPI 引擎并不局限于一个应用程序。我相信这种行为是“你的引擎”特定的。
来自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 语音实例当前拥有音频声明。