当我说话时,它只提供一次输出(结果),并且对下一次输入无效

时间:2017-05-29 18:50:59

标签: c# visual-studio speech-recognition

这是我的代码,我希望根据我给定的输入不断获得结果,但应用程序只提供一次输出然后什么都不做。我认为必须循环结果类,实际上不确定在哪里。请帮帮我:) SpeechRecognizer speechRecognizer = new SpeechRecognizer();

    public MainPage()
    {
        this.InitializeComponent();
        InitializeSpeechRecognizer();

    }
    private async void InitializeSpeechRecognizer()
    {
        speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;
        await speechRecognizer.CompileConstraintsAsync();
        // Start recognition.

        SpeechRecognitionResult speechRecognitionResult= await speechRecognizer.RecognizeAsync();
            textBox1.Text = speechRecognitionResult.Text;
        // Compile the constraint.


    }

    private async void speechRecognizer_RecognitionQualityDegrading(
Windows.Media.SpeechRecognition.SpeechRecognizer sender,
Windows.Media.SpeechRecognition.SpeechRecognitionQualityDegradingEventArgs args)
    {
        // Create an instance of a speech synthesis engine (voice).
        var speechSynthesizer =
            new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

        // If input speech is too quiet, prompt the user to speak louder.
        if (args.Problem == Windows.Media.SpeechRecognition.SpeechRecognitionAudioProblem.TooQuiet)
        {
            // Generate the audio stream from plain text.
            Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream;
            try
            {
                stream = await speechSynthesizer.SynthesizeTextToStreamAsync("Try speaking louder");
                stream.Seek(0);
            }
            catch (Exception)
            {
                stream = null;
            }


        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

您应该注册 SpeechRecognized 事件,并将结果文本设置为事件处理程序中的文本框。它只工作一次,因为InitializeSpeechRecognizer被调用一次,这不是正确的地方。

编辑:最简单的实现就是这样;

SpeechRecognizer sr = new SpeechRecognizer();
sr.SpeechRecognized += (s, e) => {
            Console.WriteLine("Recognized Text :{0}, Confidence {1}",
                               e.Result.Text,e.Result.Confidence); 
        };

here

中还有一个winforms示例