在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的交替?謝謝。
謝謝。但是,我無法理解System.Speech.Recognition.SpeechRecognitionEngine類可以設置單詞範圍來識別和替換。 –
因爲這是在Sapi 5.3中添加的。但即使在Sapi 5.3下,雖然您可以*請求替代方案,但您只能獲得原始記錄。 –
謝謝你的回答,埃裏克。 –