2009-03-24 10 views
2

Le moteur SAPI ne peut restituer que le TTS d'une application à la fois (j'ai exécuté un test avec deux instances de l'exemple Windows SDK TTSApplication pour le vérifier). J'écris une application dans laquelle j'ai besoin de détecter si le moteur TTS est en train de parler (c'est-à-dire sous le contrôle d'une application séparée, pas la mienne).Comment détecter quand le moteur SAPI TTS est occupé

Quelqu'un sait-il s'il vous plaît comment puis-je par programmation (en C++) détecter l'état occupé/prêt du moteur SAPI TTS? J'ai essayé d'utiliser ISpVoice :: GetStatus() mais cela ne semble fonctionner que pour toute activité TTS dans ma propre application.

Merci.

Répondre

0

Par exemple dans SAPI4, IVTxtAttributes :: IsSpeaking récupère un tel statut (si le moteur est en train de lire des échantillons sur un périphérique audio). Quoi qu'il en soit, le moteur général SAPI de l'IMO n'est pas limité à une seule application. Je crois que ce comportement est spécifique à votre moteur.

2

C'est la solution pour savoir si le système de synthèse vocale parle ou non.

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

0

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

SPRUNSTATE répertorie les états d'exécution de la voix.

typedef enum SPRUNSTATE 
{ 
    SPRS_DONE, 
    SPRS_IS_SPEAKING 
} SPRUNSTATE; 

éléments:

SPRS_DONE La voix a terminé le traitement de tous les flux mise en attente. SPRS_IS_SPEAKING L'instance vocale a actuellement l'audio revendiqué.