2013-11-21 49 views
0

在windows7平臺上我可以使用System.Speech.Recognition.SpeechRecognitionEngine將語音轉換爲文本。通過SpeechRecognitionEngine當SpeechRecognized事件觸發時我可以得到一些替代字,而且我可以向用戶展示這些詞供選擇。如何獲取SAPI語音識別結果

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平臺上運行。因此我想通過使用sapi5.1來植入特定的vertion以在xp操作系統上運行。

我已經獲得了sapi 5.1文檔的一部分,那麼我明白了:在sapi5.1中,我可以使用「命令和控制」方式來執行此操作。但是當我使用「命令和控制」時,不能使用「Result.Alternates()」方法。那麼,我怎樣才能達到SpeechRecognitionEngine的相同效果呢?

我嘗試下面的代碼,並有一個COM 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); 
      } 
     } 
    } 

有沒有辦法通過COM的方式獲得使用SAPI的交替?謝謝。

回答

0

在SAPI(任何版本)中,命令和控制語法沒有交替。只有聽寫語法有替代。

+0

謝謝。但是,我無法理解System.Speech.Recognition.SpeechRecognitionEngine類可以設置單詞範圍來識別和替換。 –

+0

因爲這是在Sapi 5.3中添加的。但即使在Sapi 5.3下,雖然您可以*請求替代方案,但您只能獲得原始記錄。 –

+0

謝謝你的回答,埃裏克。 –