9

我对 C# 和 Microsoft Speech 平台都比较陌生,但我正在开发一个需要转录免费听写的服务器应用程序。MS Speech Platform SDK 看起来很完美,并且可以在服务器上运行,除非我在 GrammarBuilder 中引用 AppendDictation() 方法。

我正在使用 Microsoft Speech Platform SDK 11,如果我定义语法,应用程序可以正常工作,但是当我添加 AppendDictation() 时,我遇到了这个错误:

Cannot find grammar referenced by this grammar.

即使是文档中的这个示例似乎也失败了:

GrammarBuilder startStop = new GrammarBuilder();
GrammarBuilder dictation = new GrammarBuilder();
dictation.AppendDictation();

startStop.Append(new SemanticResultKey("StartDictation", new SemanticResultValue("Start Dictation",true)));
startStop.Append(new SemanticResultKey("DictationInput", dictation));
startStop.Append(new SemanticResultKey("StopDictation", new SemanticResultValue("Stop Dictation", false)));
Grammar grammar=new Grammar(startStop);
grammar.Enabled=true;
grammar.Name=" Free-Text Dictation ";
_recognizer.LoadGrammar(grammar);

奇怪的是,如果我将 LoadGrammar 更改为 LoadGrammarAsync,则会加载语法(或至少调用事件处理程序),但是识别器会因以下错误而失败:

Error: At least one grammar must be loaded before doing a recognition.

我读过该平台的服务器版本不支持听写,但它会附带一个不起作用的方法似乎很奇怪。有没有人设法让听写语法在服务器上工作?我究竟做错了什么?

非常感谢

4

2 回答 2

11

对于将来可能遇到此问题的任何人-我现在已经与 Microsoft 来回发送电子邮件,最终收到了以下回复:

托管接口(Microsoft.Speech 和 System.Speech)建立在本机 SAPI 接口之上。这些接口对于服务器引擎和桌面引擎都是相同的。

但是引擎本身负责实现听写,而服务器引擎不这样做。因此,加载语法时调用会失败。

不是我希望的答案,但它确实解释了它。

于 2012-02-29T18:01:40.143 回答
3

如果你使用System.Speech,你可以用 加载你的语法_recognizer.LoadGrammar(new DictationGrammar());,它会很好用。识别还不错,但是你必须使用 16KHz PCM 波形文件或其他兼容的波形文件配置。可悲的DictationGrammar()是,它不适用于Microsoft.Speech.

于 2012-07-05T04:01:14.820 回答