【问题标题】:I can't understand why this code is not working. (C#)我不明白为什么这段代码不起作用。 (C#)
【发布时间】:2012-05-25 01:27:22
【问题描述】:

我是 C# 新手,为了学习,我正在观看并尝试网络上的示例。

我看到了这个例子:

using System;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Forms;

using System.Speech.Recognition;

namespace MouseController
{
    public partial class Form1 : Form
    {
        SpeechRecognitionEngine recognitionEngine; 

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Initialize();
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        recognitionEngine.RecognizeAsyncStop();
    }

    private void Initialize()
    {
        recognitionEngine = new SpeechRecognitionEngine();
        recognitionEngine.SetInputToDefaultAudioDevice();
        recognitionEngine.SpeechRecognized += (s, args) =>
        {
            string line = "";
            foreach (RecognizedWordUnit word in args.Result.Words)
            {
                if (word.Confidence > 0.5f)
                    line += word.Text + " ";
            }

            string command = line.Trim();

            switch (command)
            {
                case "left":
                    MoveMouse(Cursor.Position.X - 50, Cursor.Position.Y);
                    break;
                case "right":
                    MoveMouse(Cursor.Position.X + 50, Cursor.Position.Y);
                    break;
                case "up":
                    MoveMouse(Cursor.Position.X, Cursor.Position.Y - 50);
                    break;
                case "down":
                    MoveMouse(Cursor.Position.X, Cursor.Position.Y + 50);
                    break;
            }

            txtOutput.Text += line;
            txtOutput.Text += Environment.NewLine;
        };

        recognitionEngine.UnloadAllGrammars();
        recognitionEngine.LoadGrammar(CreateGrammars());
        recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
    }

    private Grammar CreateGrammars()
    {
        Choices commandChoices = new Choices("left", "right", "up", "down");
        GrammarBuilder grammarBuilder = new GrammarBuilder();
        grammarBuilder.Append(commandChoices);
        return new Grammar(grammarBuilder);
    }

    private void MoveMouse(int x, int y)
    {
        this.Cursor = new Cursor(Cursor.Current.Handle);
        Cursor.Position = new Point(x, y);
        Cursor.Clip = new Rectangle(this.Location, this.Size);
    }
}
}

但是当我说“上”、“下”、“左”或“右”时,什么都没有发生......

我也试过这个:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;

namespace SpeechRecognitionExample
{
    public partial class Form1 : Form
    {
        private SpeechRecognitionEngine recognitionEngine;

        public Form1()
        {
            InitializeComponent();

            recognitionEngine = new SpeechRecognitionEngine();
            recognitionEngine.SetInputToDefaultAudioDevice();
            recognitionEngine.SpeechRecognized += (s, args) =>
            {
                foreach (RecognizedWordUnit word in args.Result.Words)
                {
                    if (word.Confidence > 0.8f)
                        txtOutput.Text += word.Text + " ";
                }
                txtOutput.Text += Environment.NewLine;
            };
            recognitionEngine.LoadGrammar(new DictationGrammar());
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            recognitionEngine.RecognizeAsyncStop();
        }
    }
}

而且它不工作......

在这两个代码中,我都没有从 Visual Studio 中得到任何错误。

为什么它不起作用?

我检查了我的麦克风,它正在工作。

【问题讨论】:

  • 请创建一个最小的测试用例并写一个适当的标题。
  • 另外/附加地,添加大量语句来输出变量值。结果可能会出乎您的意料。不过看起来很有趣。
  • 您遇到了什么错误。当您调试应用程序时,当您说left 时,command 的值是多少?您提出了一个复杂的问题,为我们提供了所需的信息。您需要准确地告诉我们它何时失败。

标签: c# mouse voice speech


【解决方案1】:

Initialize() 的开头设置断点,并在它显示string line = ""; 的 lambda 语句上设置断点。遍历每一行并观察变量的值。如果您在这些断点上没有任何命中,那么我猜是引擎设置或输入设备有问题。

另外,您注意到您在line 上连接多个单词,然后在switch 语句中查找单个单词。如果您收到多个诸如“up up”之类的字词,它将不符合您的任何case 条件。

让我们知道您的发现,我们或许可以为您提供更好的帮助。

【讨论】:

    猜你喜欢
    • 2010-12-14
    • 2023-04-01
    • 2020-02-23
    • 2014-06-12
    • 1970-01-01
    • 2012-11-17
    • 2014-04-11
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多