2012-05-17 3 views
-1

Я новичок в C#, и, чтобы узнать, я смотрю и пробую пример из Интернета.Я не могу понять, почему этот код не работает. (C#)

Я видел этот Exemple:

using System; 
using System.Drawing; 
using System.Text.RegularExpressions; 
using System.Windows.Forms; 

using System.Speech.Recognition; 

namespace MouseController 
{ 
    public partial class Form1 : Form 
    { 
     SpeechRecognitionEngine recognitionEngine; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Initialize(); 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     recognitionEngine.RecognizeAsyncStop(); 
    } 

    private void Initialize() 
    { 
     recognitionEngine = new SpeechRecognitionEngine(); 
     recognitionEngine.SetInputToDefaultAudioDevice(); 
     recognitionEngine.SpeechRecognized += (s, args) => 
     { 
      string line = ""; 
      foreach (RecognizedWordUnit word in args.Result.Words) 
      { 
       if (word.Confidence > 0.5f) 
        line += word.Text + " "; 
      } 

      string command = line.Trim(); 

      switch (command) 
      { 
       case "left": 
        MoveMouse(Cursor.Position.X - 50, Cursor.Position.Y); 
        break; 
       case "right": 
        MoveMouse(Cursor.Position.X + 50, Cursor.Position.Y); 
        break; 
       case "up": 
        MoveMouse(Cursor.Position.X, Cursor.Position.Y - 50); 
        break; 
       case "down": 
        MoveMouse(Cursor.Position.X, Cursor.Position.Y + 50); 
        break; 
      } 

      txtOutput.Text += line; 
      txtOutput.Text += Environment.NewLine; 
     }; 

     recognitionEngine.UnloadAllGrammars(); 
     recognitionEngine.LoadGrammar(CreateGrammars()); 
     recognitionEngine.RecognizeAsync(RecognizeMode.Multiple); 
    } 

    private Grammar CreateGrammars() 
    { 
     Choices commandChoices = new Choices("left", "right", "up", "down"); 
     GrammarBuilder grammarBuilder = new GrammarBuilder(); 
     grammarBuilder.Append(commandChoices); 
     return new Grammar(grammarBuilder); 
    } 

    private void MoveMouse(int x, int y) 
    { 
     this.Cursor = new Cursor(Cursor.Current.Handle); 
     Cursor.Position = new Point(x, y); 
     Cursor.Clip = new Rectangle(this.Location, this.Size); 
    } 
} 
} 

Но ничего не происходит, когда я говорю "вверх", "вниз", "влево" или "вправо" ...

Я также попытался это:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Speech.Recognition; 

namespace SpeechRecognitionExample 
{ 
    public partial class Form1 : Form 
    { 
     private SpeechRecognitionEngine recognitionEngine; 

     public Form1() 
     { 
      InitializeComponent(); 

      recognitionEngine = new SpeechRecognitionEngine(); 
      recognitionEngine.SetInputToDefaultAudioDevice(); 
      recognitionEngine.SpeechRecognized += (s, args) => 
      { 
       foreach (RecognizedWordUnit word in args.Result.Words) 
       { 
        if (word.Confidence > 0.8f) 
         txtOutput.Text += word.Text + " "; 
       } 
       txtOutput.Text += Environment.NewLine; 
      }; 
      recognitionEngine.LoadGrammar(new DictationGrammar()); 
     } 

     private void btnStart_Click(object sender, EventArgs e) 
     { 
      recognitionEngine.RecognizeAsync(RecognizeMode.Multiple); 
     } 

     private void btnStop_Click(object sender, EventArgs e) 
     { 
      recognitionEngine.RecognizeAsyncStop(); 
     } 
    } 
} 

И это не работает ...

В обоих этих кодов я не получаю никаких ошибок из Visual Studio.

Почему это не работает?

Я проверил свой микрофон, и он работает.

+11

Пожалуйста, создайте минимальный тестовый файл и напишите правильно сфокусированный заголовок. –

+1

Альтернативно/Дополнительно, посыпьте во множество операторов значения выходных переменных. Результаты могут удивить ваши ожидания. Похоже, забавный сценарий. – jpaugh

+0

Какие ошибки вы получаете. Когда вы отлаживаете приложение, что такое значение 'command', когда вы говорите' left'? Вы задаете сложный вопрос, дающий нам необходимую информацию. Вы должны сказать нам, когда это произойдет. –

ответ

0

Установите точку останова в начале Initialize(), а также в описании лямбда, где указано string line = "";. Пройдите через каждую строку и посмотрите значения переменных. Если вы не получите никаких ударов по этим точкам останова, то что-то не так с настройками двигателя или устройством ввода, я бы предположил.

Кроме того, вы отмечаете, что вы объединяете несколько слов на line и затем ищете одно слово в инструкции switch. Если вы получите несколько слов типа «вверх», это не будет соответствовать ни одному из ваших условий case.

Сообщите нам, что вы нашли, и мы сможем помочь вам лучше.

Смежные вопросы