C# 语音识别 - 将用户语音输入存储到字符串
C# Speech Recognition - Store user speech input to string
所以,我想要实现的是,当 SpeechSynthesizer 询问 "What should I call you?" 并且用户说 "Bob" 时,将 "Bob" 存储在一个名为 myName 的字符串变量中,如图所示和回复 ("Hello" + myName)。现在,我在 SpeechSynthesizer 理解的 .txt 文件中有一个单词列表,并且在该列表中有 "Bob"。我有一个用户语音输入的日志,我可以看到它正在注册但没有执行 if 语句。
我不完全了解这个库并尝试进行一些研究,但找不到任何与我的问题相关的内容。
重要的是,我需要将它存储在一个变量中,因为这将解决我遇到的其他问题。这更像是一个示例问题。
提前致谢。
private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "listen")
{
listenMode = true; //resume listening
sSynth.Speak("listening mode initializing. Listening now");
}
if (listenMode == true)
{
switch (e.Result.Text)
{
case "setup":
sSynth.Speak("setup initialized");
sSynth.Speak("what should i call you?");
if (e.Result.Text == "bob")
{
myName = e.Result.Text;
sSynth.Speak("hello " + myName);
break;
}
else
break;
default:
answer.Text = answer.Text + " " + e.Result.Text.ToString();
break;
}
}
}
我可以这样(但这不是我需要的)。
case "Bob":
sSynth.Speak("Hello Bob");
break;
不要认为事件值是即时更改的。
因此,对于已识别数据的每个部分,都会引发新事件。
我建议将参数类型/名称(最好是枚举)作为变量,并根据执行操作的值检查处理程序中的值。
private string _parameter = string.Empty;
private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
switch(_parameter)
{
case string.Empty:
{
switch (e.Result.Text)
{
case "setup": _parameter = "Name"; ...
}
break;
}
case "Name" :
{
sSynth.Speak("hello " + myName);
_parameter = "Age";
}
...
}
}
所以,我想要实现的是,当 SpeechSynthesizer 询问 "What should I call you?" 并且用户说 "Bob" 时,将 "Bob" 存储在一个名为 myName 的字符串变量中,如图所示和回复 ("Hello" + myName)。现在,我在 SpeechSynthesizer 理解的 .txt 文件中有一个单词列表,并且在该列表中有 "Bob"。我有一个用户语音输入的日志,我可以看到它正在注册但没有执行 if 语句。
我不完全了解这个库并尝试进行一些研究,但找不到任何与我的问题相关的内容。
重要的是,我需要将它存储在一个变量中,因为这将解决我遇到的其他问题。这更像是一个示例问题。
提前致谢。
private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "listen")
{
listenMode = true; //resume listening
sSynth.Speak("listening mode initializing. Listening now");
}
if (listenMode == true)
{
switch (e.Result.Text)
{
case "setup":
sSynth.Speak("setup initialized");
sSynth.Speak("what should i call you?");
if (e.Result.Text == "bob")
{
myName = e.Result.Text;
sSynth.Speak("hello " + myName);
break;
}
else
break;
default:
answer.Text = answer.Text + " " + e.Result.Text.ToString();
break;
}
}
}
我可以这样(但这不是我需要的)。
case "Bob":
sSynth.Speak("Hello Bob");
break;
不要认为事件值是即时更改的。 因此,对于已识别数据的每个部分,都会引发新事件。
我建议将参数类型/名称(最好是枚举)作为变量,并根据执行操作的值检查处理程序中的值。
private string _parameter = string.Empty;
private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
switch(_parameter)
{
case string.Empty:
{
switch (e.Result.Text)
{
case "setup": _parameter = "Name"; ...
}
break;
}
case "Name" :
{
sSynth.Speak("hello " + myName);
_parameter = "Age";
}
...
}
}