2012-01-14 8 views
1

私はC#を使って音声メッセージでLANチャットアプリケーションを作っています。私はSAPI 5.1を使用していますが、メッセージを話す際に問題が発生しました。私が "HI"というメッセージを書くと、彼のコンピュータはメッセージを受信し、 "HI"という言葉を話すことができますが、 "HELLO"という新しいメッセージを書くと、コンピュータは最初のメッセージ "HI" "HELLO"という言葉を話す。チャットアプリケーションで音声メッセージが再生されないようにします。

古いメッセージ "HI"をもう一度繰り返すべきではなく、新しいメッセージ "HELLO"と言うべきです。ここで

は私のコードです:

private void rtbConversation_TextChanged(object sender, EventArgs e) 
{ 
    speech.Rate = speechRate; 
    speech.Speak(rtbConversation.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync); 

    speech.Voice = speech.GetVoices(string.Empty, 
          string.Empty).Item(combo1.SelectedIndex); 
} 

答えて

0

RichTextBoxTextChangedイベントが呼び出されたときにこのコードを実行しているかのように見えます。恐らくRichTextBoxはメッセージをに蓄積するでしょう。 RichTextBoxTextプロパティをスピーチAPIに渡すと、それ以前に話したメッセージを含めて、すべてののメッセージがスピーチされます。

リッチテキストボックスのテキストが変更されるたびにコードを呼び出すのではなく、という基になるイベントを使用して、リッチテキストボックスのテキストを変更します。例えば。あなたはMessageReceivedイベントのようなものを公開するリスナーを持っていますか?このようなイベントには、受信したメッセージのテキストのみを含める必要があります。これをスピーチAPIに渡すことができます。それはあなたがメッセージを監視することができます唯一方法はRichTextBox.TextChangedイベントを処理するためであることが判明した場合

、あなたは前のテキストに新しいテキストを比較するだけとなっているものを話すの方法のいくつかを持っている必要があります追加されました。

ちなみに、speech.Speak()コールとspeech.Voice割り当ての順序が間違っているようです。私はあなたがVoiceプロパティSpeak()メソッドの前にの前に設定する必要があると思います。それがそのまま動作する場合は、Speak()メソッドを非同期フラグで呼び出していて、その後Voiceがすぐに設定されているため、それがちょうど所望のとおりに動作するようになると思われます。回実行されます。

+0

こんにちはAdam Ralphさんはあなたの回答のサンプルコードを教えてもらえますか?お願いします –

関連する問題