2017-06-12 135 views
2

我目前正在搞亂System.Speech使亞馬遜Alexa類型的程序,你會問它一個命令,並會回答一個答案。檢測特定的短語開始識別命令

現在我已將它設置爲單擊按鈕的位置,因此它開始檢測來自麥克風的音頻輸入,但我想要執行Alexa樣式或Google樣式(「Alexa」或「Hey Google」)。

這是我到目前爲止有:

public partial class SpeechRecognition : Form 
{ 

    SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine(); 
    SpeechSynthesizer synth = new SpeechSynthesizer(); 




    public SpeechRecognition() 
    { 
     InitializeComponent(); 
    } 

    private void SpeechRecognition_Load(object sender, EventArgs e) 
    { 
     Choices command = new Choices(); 
     command.Add(new string[] { "Say Hello", "Print my name", "speak selected text", "time", "current weather", "humidity"}); 

     GrammarBuilder gBuilder = new GrammarBuilder(); 
     gBuilder.Append(command); 

     Grammar grammar = new Grammar(gBuilder); 

     recEngine.LoadGrammarAsync(grammar); 
     recEngine.SetInputToDefaultAudioDevice(); 

     recEngine.SpeechRecognized += recEngine_SpeechRecognized; 

    } 

    void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     synth.SelectVoiceByHints(VoiceGender.Neutral); 
     var request = new ForecastIORequest("...", 38.47382f, -76.50636f, DateTime.Now, Unit.us); 
     var response = request.Get(); 
     switch (e.Result.Text) 
     { 
      case "Say Hello": 
       PromptBuilder builder = new PromptBuilder(); 

       builder.StartSentence(); 
       builder.AppendText("Hello Zack"); 
       builder.EndSentence(); 

       builder.AppendBreak(new TimeSpan(0, 0, 0, 0,50)); 

       builder.StartSentence(); 
       builder.AppendText("How are you?"); 
       builder.EndSentence(); 

       synth.SpeakAsync(builder); 
       break; 

      case "Print my name": 
       richTextBox1.Text += "\nZack"; 
       break; 

      case "speak selected text": 
       synth.SpeakAsync(richTextBox1.SelectedText); 
       break; 
      case "time": 
       DateTime time = DateTime.Now; 
       synth.SpeakAsync(time.ToShortTimeString()); 
       break; 
      case "current weather": 
       response = request.Get(); 

       synth.SpeakAsync("The weather in St. Leonard is " + response.currently.summary + "with a temperature of " + Math.Round((decimal)response.currently.temperature, 0) + " degrees farenheit"); 
       break; 
      case "humidity": 
       response = request.Get(); 
       synth.SpeakAsync("Current humidity is " + 100 * response.currently.humidity + "percent"); 
       break; 
      default: 
       synth.SpeakAsync("I did not recognize a command"); 
       break; 
     } 
    } 

    private void enableBtn_Click(object sender, EventArgs e) 
    { 
     recEngine.RecognizeAsync(RecognizeMode.Multiple); 
     disableBtn.Enabled = true; 

    } 

    private void disableBtn_Click(object sender, EventArgs e) 
    { 
     recEngine.RecognizeAsyncStop(); 
     disableBtn.Enabled = false; 
    } 

我怎麼會改變這一點,以便它不斷地監聽一個短語,則它會監聽後,一個命令?我猜我需要創建識別引擎的另一個實例?任何幫助都會很棒。

回答

0

不知道具體情況,你會怎麼編寫的傾聽者,聽「永遠」,你可以簡單地創建一個無限循環:

while(true) { 

    //add your code that listens and waits for the wake word and once you process the wake word exit 

}