2016-08-06 20 views
0

Ich habe den folgenden Code, um die Spracherkennung Bibliothek:Gespräch mit C# Speech Bibliothek

var listen = new SpeechRecognitionEngine(); 
var reader = new Choices(File.ReadLines(@"C:\words.txt") 
listen.LoadGrammar(new Grammar(new GrammarBuilder(reader))); 
listen.SpeechRecognized += listen_SpeechRecognized; 
listen.SpeechRecognitionRejected += listen_SpeechRecognitionRejected; 
listen.SetInputToDefaultAudioDevice(); 
listen.RecognizeAsync(RecognizeMode.Multiple); 

Und ich habe einen Ereignis-Listener so ...

static void listen_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
     { 

      var talk = new SpeechSynthesizer(); 
      if (e.Result.Text == "Search Stock Symbol") 
      { 
       talk.Speak("What symbol?"); 
       //Do I have to create another event listener? 
       //a Listener .. symbol = a.Result.Text 
       //talk.Speak(GetQuote(symbol)) 
      { 
     } 

Hätte ich eine erstellen Ereignis-Listener für jeden Teil der "Konversation"? Gibt es einen besseren Weg, wenn das der Fall ist?

Beispiel Gespräch:

  • Me: Suchen Stock-Symbol
  • Computer: Was Symbol?
  • Me: AAPL
  • Computer: Apple Handel an ....

Antwort

3

Nein, nur die eine, dann variieren, was Sie auf Sie je nachdem, was Text empfangen wurde. In einigen Code vor:

List<string> stockSymbols = new List<string>(); 
    stockSymbols.Add("AAPL"); 

Dann

string lastSpeechInput; 

    static void listen_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     var talk = new SpeechSynthesizer(); 

     switch (e.Result.Text) { 
      case "Search Stock Symbol": 
       talk.Speak("What symbol?"); 
       break; 
      default: 
       break; 
     } 

     if (stockSymbols.Contains(e.Result.Text) && lastSpeechInput == "Search Stock Symbol") { 
      talk.Speak(getStockPrice(e.Result.Text); 
     } 

     lastSpeechInput = e.Result.Text; 
    } 
+0

Würde das funktionieren, wenn "AAPL" nicht in dictionary.txt ist? Ich habe Ihren Code ausprobiert und es scheint nicht zu funktionieren. Dies ist der Code, den ich ausprobiert habe: http://pastebin.com/Jpkz8Xu9 –

+0

Oh, ich sehe, der Mangel an Standard im Switch-Fall behoben. Beachten Sie auch die erfundene Funktion getStockPrice –

+0

Ja, ich weiß, dass die Funktion erfunden ist. Aber das Problem dabei ist, dass e.Result.Text immer == "Search Stock Symbol" ist. Dies funktioniert nur, wenn "Search Stock Symbol" in der Liste ist. –