这是我的代码,我希望根据我给定的输入不断获得结果,但应用程序只提供一次输出然后什么都不做。我认为必须循环结果类,实际上不确定在哪里。请帮帮我:) 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;
}
}
}
}
}
答案 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);
};
中还有一个winforms示例