Как я могу получить альтернативы результата распознавания речи SAPI
На платформе Windows7 я могу использовать System.Speech.Recognition.SpeechRecognitionEngine для преобразования голоса в текст. По SpeechRecognitionEngine, когда сработало событие SpeechRecognized, я могу получить несколько альтернативных слов, и я могу показать это слово пользователям на выбор.
void engine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (this.SpeechRecognized != null)
{
this.SpeechRecognized(this, new RecognizedResultEventArgs
{
Text = e.Result.Text,
Alternates = new ReadOnlyCollection<string>(e.Result.Alternates.Select(p => p.Text).ToList())
});
}
}
Кстати, когда я инициализирую экземпляр SpeechRecognitionEngine, я хочу загрузить определенное слово вместо использования "DictationGrammar".
Моя программа иногда должна работать на платформе xp. Поэтому я хочу использовать конкретную версию для запуска в операционной системе xp, используя sapi5.1.
Я перечитал часть документа sapi5.1, а затем понял: в sapi5.1 я могу использовать способ "управления и контроля". но метод "Result.Alternates()" нельзя использовать, когда я использую "команда и управление". Итак, как я могу добиться того же эффекта SpeechRecognitionEngine?
Я попробовал следующий код, и есть Eception:
public void RecoContext_Recognition(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult Result)
{
ISpeechPhraseProperty oItem;
oItem = Result.PhraseInfo.Properties.Item(0);
if ((System.Decimal)Result.PhraseInfo.GrammarId == grammarId)
{
if (this.SpeechRecognized != null)
{
RecognizedResultEventArgs e = new RecognizedResultEventArgs();
e.Text = oItem.Name;
// The following code throws an exception
ISpeechPhraseAlternates alternates = Result.Alternates(10);
List<string> s = new List<string>();
foreach (ISpeechPhraseAlternate item in alternates)
{
s.Add(item.RecoResult.PhraseInfo.Properties.Item(0).Name);
}
e.Alternates = new ReadOnlyCollection<string>(s);
this.SpeechRecognized(this, e);
}
}
}
Есть ли способ получить альтернативы с помощью sapi через COM? Спасибо.
1 ответ
В SAPI (любая версия) командные и контрольные грамматики не имеют альтернатив. Только грамматики диктовки имеют альтернативы.