2012-02-19 2 views
9

Я относительно новичок как на C#, так и на платформе Microsoft Speech, но я работаю над серверным приложением, которое должно будет транскрибировать бесплатную диктовку. SDK для MS Speech Platform казался идеальным и работает на сервере, если я не ссылаюсь на метод AppendDictation() в GrammarBuilder.AppendDictation на Microsoft Speech Platform 11 (Server)?

Я использую 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, грамматические нагрузки (или, по крайней мере, называется обработчик события), но тогда recoginzer терпит неудачу с этой ошибкой:

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

Я читал, что серверная версия платформы не поддерживает диктовку, но кажется странным, что она будет поставляться с методом, который просто не работает. Кто-нибудь сумел заставить грамматику диктовки работать на сервере? Что я делаю не так?

Большое спасибо

ответ

11

Для тех, кто может прийти через это в будущем - Я теперь по электронной почте взад и вперед с Microsoft, и в конечном счете получил этот ответ:

The managed interfaces (Microsoft.Speech and System.Speech) are built on top of the native SAPI interfaces. These interfaces are the same for both the Server engine and the Desktop engine.

BUT the engine itself is responsible for implementing dictation, and the Server engine does not do so. Therefore, the call will fail when you load the grammar.

Не ответ я надеялся, но он это объясняет.

+1

Есть ли другой способ сделать диктовку? – KTF

3

Если вы используете System.Speech, вы можете загрузить грамматику с помощью _recognizer.LoadGrammar(new DictationGrammar());, и она будет работать хорошо. Признание неплохое, но тогда вам нужно использовать 16-килограммовый волновой файл PCM или другие совместимые конфигурации волновых файлов. К сожалению, не доступен с Microsoft.Speech.