[英]How can I change the value inside this array? C#
所以我想用一些可以更改的命令列表制作一些语音识别(使用system.speech.recognition)软件。 因此,例如,起初您有两种命令列表:“ Left,Right”,当您说左或右时它将执行某些功能。 但是我想在此软件中可以随时更改命令列表,例如,在上面的命令列表中,我想将单词“ Left”更改为“ Up”,当我说“ Up”时,它将执行在执行“左”字之前的功能。 这是我的代码:
Choices commands = new Choices();
GrammarBuilder gBuilder = new GrammarBuilder();
public void Masokey_Load(object sender, EventArgs e)
{
// Choices commands = new Choices();
commands.Add(new string[] { Atext.Text, Dtext.Text});
// GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
Grammar grammar = new Grammar(gBuilder);
recEngine.LoadGrammarAsync(grammar);
recEngine.SetInputToDefaultAudioDevice();
recEngine.SpeechRecognized += RecEngine_SpeechRecognized;
}
//save_btn
public void Savebtn_Click(object sender, EventArgs e)
{
commands.Add(new string[] { Atext.Text, Dtext.Text});
gBuilder.Append(commands);
}
public void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if(e.Result.Text == Atext.Text)
{
PressKey(0x1E);
}
else if (e.Result.Text == Dtext.Text)
{
PressKey(0x20);
}
}
我想更改“ command.Add(新字符串[] {Atext.Text,Dtext.Text)”中的值
我将命令列表放入文本框中,因此当我运行软件时,当我想更改命令列表时,我只需要更改文本框内的单词,然后单击“保存”按钮,命令列表就会改变。 问题是,当我单击“保存”按钮时,命令列表不会更改。
是否可以更改Choices对象和GrammarBuilder对象的值?
填充数组后,您不应修改该数组(可能是列表)。 我假设gBuilder
包含语音识别接受的所有命令。 如果是这样,请添加所有将要使用的命令,并在RecEngine_SpeechRecognized
事件中检查它们是否已启用,然后才根据它们实际触发操作。
给你一个基本的例子:
public void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//mode could be a string or an enum variable
if(mode.Equals("LEFT_RIGHT") && e.Result.Text == Atext.Text)
{
PressKey(0x1E);
}
else if (mode.Equals("LEFT_RIGHT") && e.Result.Text == Dtext.Text)
{
PressKey(0x20);
}else if (mode.Equals("UP_DOWN") && e.Result.Text == Stext.Text)
{
PressKey(...);
}else if(mode.Equals("UP_DOWN") && e.Result.Text == Wtext.Text)
{
PressKey(....);
}
}
如果您的程序将变得更加复杂,那么更好的方法是创建一个已启用命令的列表。 检查该实现的示例:
public void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//enabledCommands is a list of strings (or whatever can store Atext.Text and the others)
if(enabledCommands.Contains(e.Result.Text){ //First check if whatever command you received is enabled
if(e.Result.Text == Atext.Text) //then check what command it is and execute it
{
PressKey(0x1E);
}
}
}
如果您的程序要求您可以走得更远并实现一个对象列表,则每个对象都包含一个命令和一个布尔值(指示是否已启用该命令),但这比您需要的代码要复杂得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.