C# 检测特定短语以开始识别命令

C# 检测特定短语以开始识别命令,c#,speech-recognition,speech-synthesis,C#,Speech Recognition,Speech Synthesis,我现在正在搞乱这个系统。制作一个Amazon Alexa类型的程序,在这个程序中,你会问它一个命令,然后回答 现在我已经设置好了,我点击一个按钮,它开始检测来自麦克风的音频输入,但我想做Alexa风格或谷歌风格(“Alexa”或“Hey Google”) 以下是我到目前为止的情况: public partial class SpeechRecognition : Form { SpeechRecognitionEngine recEngine = new SpeechRecogniti

我现在正在搞乱这个系统。制作一个Amazon Alexa类型的程序,在这个程序中,你会问它一个命令,然后回答

现在我已经设置好了,我点击一个按钮,它开始检测来自麦克风的音频输入,但我想做Alexa风格或谷歌风格(“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;
    }

我该如何改变这一点,使它不断地听那一个短语,然后再听一个命令?我猜我需要创建识别引擎的另一个实例?任何帮助都会很好。

这是旧的,但你可以使用snowboy.kitt.ai。