Я сделал некоторую кодировку на виртуальном помощнике, и я ударил блок. Вот код:Как добавить переменные в распознавание речи?
private void Form1_Load_1(object sender, System.EventArgs e)
{
SrgsDocument commands = new SrgsDocument();
SrgsRule displayList = new SrgsRule("selectList");
SrgsOneOf listTypes = new SrgsOneOf(new string[] { "hi " + name + ", my name is" , "hi " + name});
displayList.Scope = SrgsRuleScope.Public;
displayList.Elements.Add(listTypes);
commands.Rules.Add(displayList);
commands.Root = displayList;
Grammar grammar = new Grammar(commands);
recEngine.LoadGrammarAsync(grammar);
recEngine.SetInputToDefaultAudioDevice();
recEngine.RecognizeAsync(RecognizeMode.Multiple);
recEngine.SpeechRecognized +=recEngine_SpeechRecognized;
}
SpeechSynthesizer synth = new SpeechSynthesizer();
void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
String message = e.Result.Text.ToLower();
if (message.Contains("hi " + name + ", my name is"))
{
message = message.Replace("hi " + "name" + ", my name is", "");
synth.Speak("Hello " + message + ", my name is " + name);
}
else if (message.Contains("hi " + name))
{
synth.Speak("Hello!");
}
}
То, что я пытаюсь сделать, как следует из названия, это есть имя переменной заполняется из распознавания речи. Я ищу способ сделать это, который включает в себя ввод пользователя, а не добавление каждой возможности для имени отдельно. К сожалению, SpeechRecognizer смотрит только на «Мое имя», и больше ничего.
Кто-то рассказал мне о классе мусора, но я не могу понять, как его реализовать.
Мне непонятно, что вы просите. Значение 'name' имеет значение? –
Да, его не показано. 'String name =" testname ";' Я пытаюсь сопоставить предложение в грамматике, а затем дополнительное слово, которое может быть чем угодно. Я не знаю, как заставить его продолжать слушать. – Minedude78910
* дополнительное слово что может быть что угодно *? что * ничего * не является частью вашей грамматики и, к сожалению, не будет признано. – AmatuerDev