2013-11-21 5 views
0

windows7 플랫폼에서 System.Speech.Recognition.SpeechRecognitionEngine을 사용하여 음성을 텍스트로 변환 할 수 있습니다. SpeechRecognitionEngine이 SpeechRecognized 이벤트를 트리거하면 다른 대체 단어를 얻을 수 있습니다. choise에 대한 사용자에게 이러한 단어를 보여줍니다. 내가 SpeechRecognitionEngine 인스턴스를 초기화 할 때 그런데 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()) 
      }); 
    } 
} 

은 내가 대신 사용 "DictationGrammar"일부 specifical 단어를로드 할.

내 프로그램은 때때로 XP 플랫폼에서 실행해야합니다. 그래서 sapi5.1을 사용하여 xp 운영 체제에서 실행될 특정 버티션을 원합니다.

나는 sapi 5.1 문서의 일부를 읽었으며 그 다음에는 그것을 알게되었다 : sapi5.1에서 "명령 및 제어"방법을 사용할 수있다. 그러나 "Result.Alternates()"메서드는 "명령 및 제어"를 사용할 때 사용할 수 없습니다. 그렇다면 SpeechRecognitionEngine과 동일한 효과를 어떻게 얻을 수 있습니까?

나는 다음 코드를 시도하고 컴 우유 공급이 :

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에서도 대체물을 물어볼 수 있지만 원본 Reco 만 얻을 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다, Eric. –