2009-03-24 18 views
2

SAPIエンジンは、一度に1つのアプリケーションからのみTTSをレンダリングできます(これを確認するには、Windows SDK TTSApplicationサンプルの2つのインスタンスでテストを実行しました)。私は、TTSエンジンが現在話しているかどうか(すなわち、私のものではなく別のアプリケーションの制御下にある)を検出する必要のあるアプリケーションを書いています。SAPI TTSエンジンがビジー状態のときの検出方法

私はプログラムで(C++で)SAPI TTSエンジンビジー/レディ状態をどのように検出できますか?私はISpVoice :: GetStatus()を使用しようとしましたが、それは自分のアプリケーションのTTSアクティビティでのみ動作するようです。

ありがとうございました。

答えて

0

たとえば、SAPI4では、IVTxtAttributes :: IsSpeakingはそのようなステータスを取得します(エンジンが現在オーディオデバイスにサンプルを再生している場合)。

とにかくIMOの一般的なSAPIエンジンは、1つのアプリケーションに限定されません。私はこの行動があなたのエンジン特有のものだと信じています。

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

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_DONESPRS_IS_SPEAKING 音声インスタンスには現在、音声が主張されています。

関連する問題