音声認識アプリを作っています。
TextBox2にI like English.と表示させたのちにボタン3を押すと、音声認識が開始されます。
I,like,Englishのどれかのみを認識し、その認識結果をTextBox1に表示させます。
ここまではうまくいったのですが、Texbox2にI don't like French.のように先ほどとは違う文を読み込み・表示させてから、再び、ボタン3を押して、同じように音声認識させると"I","don't","like","French."に加え、前の"I","like","English"にも反応してしまいます。
wordsかgbかgに読み込まれている"I","like","English."が消えずに残っているためだと思いますが、どうすればそれが消せるかわかりません。あと、Textbox2の内容が変わるたびに、ボタン3を押して、インスタンスを何度も作成しているのもおかしいのではないかと思います。(プログラミングは不慣れなため変なことをいっていたらごめんなさい。)
でも、ほかのやり方がわかりません。
どうすれば良いでしょうか?お知恵をお貸しください。
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If TextBox2.Text <> "" Then
Dim sre = New SpeechRecognitionEngine(New System.Globalization.CultureInfo("en-US"))
Dim words As Choices = New Choices(Split(TextBox2.Text))
Dim gb As GrammarBuilder = New GrammarBuilder()
Dim value As New System.Globalization.CultureInfo("en-US")
gb.Append(words)
gb.Culture = value
'Create the actual Grammar instance, and then load it into the speech recognizer.
Dim g As Grammar = New Grammar(gb)
sre.LoadGrammar(g)
AddHandler sre.SpeechRecognized, AddressOf sre_SpeechRecognized
sre.SetInputToDefaultAudioDevice()
sre.RecognizeAsync(RecognizeMode.Multiple)
End If
End Sub
Private Sub sre_SpeechRecognized(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs)
If TextBox1.Text = "" Then
TextBox1.Text = e.Result.Text
Else
TextBox1.Text = TextBox1.Text & " " & e.Result.Text
End If
End Sub
RecognizeStopを呼んでいないので,以前のRecognizeAsyncの呼び出しが有効なままです。
MSDN: SpeechRecognitionEngine.RecognizeAsync メソッド (RecognizeMode) (System.Speech.Recognition)
http://msdn.microsoft.com/ja-jp/library/ms554584(VS.80).aspx
以前のSpeechRecognitionEngineを保持しておいて,新しく作る前に認識を終了させるのがよいかと思います。
ツイート | ![]() |