文字列を更新するには?


  2010-10-26 08:13:05  No: 147171

音声認識アプリを作っています。

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


YuO  2010-10-26 21:03:33  No: 147172

RecognizeStopを呼んでいないので,以前のRecognizeAsyncの呼び出しが有効なままです。
MSDN: SpeechRecognitionEngine.RecognizeAsync メソッド (RecognizeMode) (System.Speech.Recognition)
http://msdn.microsoft.com/ja-jp/library/ms554584(VS.80).aspx

以前のSpeechRecognitionEngineを保持しておいて,新しく作る前に認識を終了させるのがよいかと思います。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加