2016-06-20 10 views
5

私は多くの言語で多くの声でTTSをしたいと思います。すぐにSpVoiceをWPFで一時停止するには?

私はSpeechSynthesizer(Ref:System.Speech)を試しましたが、2つの英語の声が許可されています。マイクロソフトのサイトから6つの英語の声をインストールした後、私はまだ他の声を得ることができません。

SpVoice(Ref:Microsoft Speech Object Library)に変更されました。 SpVoiceは、私がインストールしたばかりの6つの声を認識することができます。問題は私がspVoice.Pause()に電話すると、完全に話すのを止める前に、常に0.5秒遅れます。私はまたSpVoiceのためにAlertBoundaryを設定しようとしましたが、それは助けになりませんでした。

SpeechSynthesizerはすぐにSpeakAsyncCancelAllで一時停止できますが、デフォルトの音声でのみ動作します。

答えて

0

基本的に、Pauseメソッドは、最も近いアラート境界で音声を一時停止し、出力デバイスを閉じて、他の音声で使用できるようにします。

spVoice.Speak()メソッドは、同期または非同期に呼び出すことができます。同期的に呼び出されると、テキストが読み込まれるまでメソッドは戻りません。非同期に呼び出された場合は即座に戻り、音声はバックグラウンド処理として発声します。

spVoice.Speak()を同期して呼び出すことを希望します。なぜこの問題が起こっているのですか?同期の代わりに非同期メソッドを使用すると、問題を解決する必要があります。その後、spVoice.Pause()はすぐに一時停止します。

SpVoice spVoice = new SpVoice(); 
spVoice.Speak ("Testing spVoice",SpeechVoiceSpeakFlags.SVSFlagsAsync); 
//...... 
spVoice.Pause(); 
+0

ありがとうございました。実際には、spVoiceを非同期で使用しました。私はこれが解決策だとは思わない。 –

関連する問題