C#使用语音识别时不必要的输入 类程序 { 静态void Main(字符串[]参数) { Brain b=新大脑(); b、 start(); } } 公共类地图 { 公共字符串密钥; 公共字符串值; 公共映射(字符串键、字符串值) { this.key=key; 这个值=值; } } 公众阶级的耳朵 { 私人演讲识别引擎耳; 公共耳朵(列出知识、EventHandler OnRecognite、EventHandler onReject) { this.ears=新的SpeechRecognitionEngine(); 选项命令=新选项(); foreach(知识中的var项目) { commands.Add(item.key); } GrammarBuilder gBuilder=新的GrammarBuilder(); gBuilder.Append(命令); 语法=新语法(gBuilder); 听力语法(语法); setInputOdeFaultAudioDevice(); ears.RecognizeAsync(RecognizeMode.Multiple); ears.SpeechRecognized+=onrecognized; ears.SpeechRecognitionRejected+=onReject; } 公共停车场() { ears.RecognizeAsyncCancel(); } 公开作废开始() { ears.RecognizeAsync(RecognizeMode.Multiple); } } 公共阶层的头脑 { 保护列表命令; 受保护名单答案; 私人只读耳朵; 公共大脑() { commands=newlist(); 添加(新映射(“列表”,“列表”)); 添加(新映射(“somethingElse”、“sometvalue”); ears=新的EAR(命令、OnReceigned、onRejected); } private void OnRecognited(对象发送方,SpeechRecognitizedEventArgs e) { Console.WriteLine(e.Result.Text); TerminateCommand(新映射(例如,Result.Text.Trim().ToLower(),null)); } 公开作废开始(){ while(true){ 字符串answer=Console.ReadLine(); 如果(回答!=“”) { TerminateCommand(新映射(应答,null)); } } } private void onRejected(对象发送方,SpeechRecognitionRejectedEventArgs e) { } 专用void terminateCommand(映射命令){ Console.WriteLine(“需要用户输入”); var answer=Console.ReadLine(); Console.WriteLine(“再次需要用户输入”); var answer2=Console.ReadLine(); } }

C#使用语音识别时不必要的输入 类程序 { 静态void Main(字符串[]参数) { Brain b=新大脑(); b、 start(); } } 公共类地图 { 公共字符串密钥; 公共字符串值; 公共映射(字符串键、字符串值) { this.key=key; 这个值=值; } } 公众阶级的耳朵 { 私人演讲识别引擎耳; 公共耳朵(列出知识、EventHandler OnRecognite、EventHandler onReject) { this.ears=新的SpeechRecognitionEngine(); 选项命令=新选项(); foreach(知识中的var项目) { commands.Add(item.key); } GrammarBuilder gBuilder=新的GrammarBuilder(); gBuilder.Append(命令); 语法=新语法(gBuilder); 听力语法(语法); setInputOdeFaultAudioDevice(); ears.RecognizeAsync(RecognizeMode.Multiple); ears.SpeechRecognized+=onrecognized; ears.SpeechRecognitionRejected+=onReject; } 公共停车场() { ears.RecognizeAsyncCancel(); } 公开作废开始() { ears.RecognizeAsync(RecognizeMode.Multiple); } } 公共阶层的头脑 { 保护列表命令; 受保护名单答案; 私人只读耳朵; 公共大脑() { commands=newlist(); 添加(新映射(“列表”,“列表”)); 添加(新映射(“somethingElse”、“sometvalue”); ears=新的EAR(命令、OnReceigned、onRejected); } private void OnRecognited(对象发送方,SpeechRecognitizedEventArgs e) { Console.WriteLine(e.Result.Text); TerminateCommand(新映射(例如,Result.Text.Trim().ToLower(),null)); } 公开作废开始(){ while(true){ 字符串answer=Console.ReadLine(); 如果(回答!=“”) { TerminateCommand(新映射(应答,null)); } } } private void onRejected(对象发送方,SpeechRecognitionRejectedEventArgs e) { } 专用void terminateCommand(映射命令){ Console.WriteLine(“需要用户输入”); var answer=Console.ReadLine(); Console.WriteLine(“再次需要用户输入”); var answer2=Console.ReadLine(); } },c#,readline,speech,C#,Readline,Speech,如果我使用键盘,“list”方法工作得很好(由TerminateCommand调用)。因此,TerminateCommand是从“start”方法调用的。但是,如果我使用VoiceRecognition(基本的Mycrosoft.Speech),并且从eventHandler调用TerminateCommand,每当list方法需要用户输入时,我都必须按Enter键,写入sg,然后再次按Enter键。“list”方法中的每个Console.ReadLine()前面似乎都有另一个Console.R

如果我使用键盘,“list”方法工作得很好(由TerminateCommand调用)。因此,TerminateCommand是从“start”方法调用的。但是,如果我使用VoiceRecognition(基本的Mycrosoft.Speech),并且从eventHandler调用TerminateCommand,每当list方法需要用户输入时,我都必须按Enter键,写入sg,然后再次按Enter键。“list”方法中的每个Console.ReadLine()前面似乎都有另一个Console.ReadLine()。 ears.stop()仅停止语音识别。 Map是一个类,包含2个字符串(值、键)。
我有点困惑。有什么想法吗?

你能把问题缩小一点吗?这是很多代码,其中大部分不会导致问题。这节省了我们为您做这件事的时间。:)我把范围缩小了一点。从VoiceRecognite事件处理程序调用函数中的每个Console.ReadLine()时,都会出现此问题。如果从任何其他不涉及语音识别的功能调用它,它可以正常工作。我想我想要的是一个,这样我就可以将它复制/粘贴到IDE中,直接开始帮助您工作,而无需额外准备。请记住,我们每天都会收到数千个问题,因此您正在争夺我们的时间。:)祝你好运,抱歉误会了。这是我所能做到的最低限度。可复制的。需要语音参考。因此,如果OnRecognited调用TerminateCommand,则每个Console.ReadLine()都会被调用2x,如果它是从“开始”调用的,它的工作方式就像charm一样。-@如果你不使用语音模块,那么问题就消失了?很奇怪!不知道我能不能解释。
class Program
{
    static void Main(string[] args)
    {
        Brain b = new Brain();
        b.start();
    }
}
public class Map
{
    public string key;
    public string value;
    public Map(string key, string value)
    {
        this.key = key;
        this.value = value;
    }
}
public class Ears
{
    private SpeechRecognitionEngine ears;
    public Ears(List<Map> knowledge, EventHandler<SpeechRecognizedEventArgs> onRecognise, EventHandler<SpeechRecognitionRejectedEventArgs> onReject)
    {

        this.ears = new SpeechRecognitionEngine();

        Choices commands = new Choices();
        foreach (var item in knowledge)
        {
            commands.Add(item.key);
        }
        GrammarBuilder gBuilder = new GrammarBuilder();
        gBuilder.Append(commands);
        Grammar grammar = new Grammar(gBuilder);

        ears.LoadGrammar(grammar);
        ears.SetInputToDefaultAudioDevice();

        ears.RecognizeAsync(RecognizeMode.Multiple);
        ears.SpeechRecognized += onRecognise;
        ears.SpeechRecognitionRejected += onReject;

    }
    public void stop()
    {
        ears.RecognizeAsyncCancel();
    }
    public void start()
    {
        ears.RecognizeAsync(RecognizeMode.Multiple);
    }
}
public class Brain
{
    protected List<Map> commands;
    protected List<Map> answers;

    private readonly Ears ears;
    public Brain()
    {
        commands = new List<Map>();
        commands.Add(new Map("list",""));
        commands.Add(new Map("somethingElse","someValue"));
        ears = new Ears(commands, onRecognized, onRejected);
    }
    private void onRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        Console.WriteLine(e.Result.Text);
        terminateCommands(new Map(e.Result.Text.Trim().ToLower(), null));
    }
    public void start() {
        while (true) {
            string answer = Console.ReadLine();
            if (answer!="")
            {
                terminateCommands(new Map(answer, null));
            }
        }
    }
    private void onRejected(object sender, SpeechRecognitionRejectedEventArgs e)
    {
    }
    private void terminateCommands(Map cmd) {
        Console.WriteLine("need user input");
        var answer = Console.ReadLine();
        Console.WriteLine("need user input again");
        var answer2 = Console.ReadLine();

    }
}