1

该程序抛出异常,我该如何解决?

例外是“语音识别在此系统上不可用。找不到 SAPI 和语音识别引擎”。

public partial class Form1 : Form
{
    SpeechRecognizer rec = new SpeechRecognizer();
    public Form1()
    {
        InitializeComponent();
        rec.SpeechRecognized += rec_SpeechRecognized;

    }
    void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        lblLetter.Text = e.Result.Text;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        var c = new Choices();
        for (var i = 0; i <= 100; i++)
            c.Add(i.ToString());
        var gb = new GrammarBuilder(c);
        var g = new Grammar(gb);
        rec.LoadGrammar(g);
        rec.Enabled = true;

    }
4

2 回答 2

1

好吧,听起来您的系统上没有安装必要的组件,或者您可能没有在完全受信任的应用程序中运行:

完全信任直接调用方。该成员不能由部分信任的代码使用。有关更多信息,请参阅使用来自部分受信任代码的库。

资源

虽然我原以为你会得到一个不同的错误。这个问题出现在所有机器上还是只有一两台机器上?如果是后者,则表明它是未安装所需的组件。

尝试将SpeechRecognizer对象的初始化移动到表单构造函数中并将其包装在一个try ... catch块中。这将 a) 告诉你是否真的是这个问题导致了问题,并且 b) 让你能够优雅地恢复。

于 2010-09-04T10:16:25.713 回答
1

你试图在什么操作系统上运行它?我已在 Windows 7 Professional 上成功执行了您的代码。

我的怀疑是,虽然System.Speech在框架内提供,但 SAPI/语音识别引擎并未随它一起安装,尽管默认情况下它们随 Windows 7 一起提供。查看您的windows\system32文件夹,看看是否有一个子文件夹被调用Speech来确定这一点。

我刚刚快速浏览了一下System.Speech.dll使用 Reflector 和System.Speech.Recognition.SpeechRecognizer最终调用的构造函数,并实例化了一个名为 的类System.Speech.Internal.SapiInterop.SapiRecognizer,这清楚地表明您需要安装非托管组件。

尝试下载并安装Speech SDK 5.1

于 2010-09-04T10:25:13.620 回答