2012-07-14 4 views
0

여러 가지 테스트 프로그램으로 며칠 동안 음성 인식을 조금 해봤지만 제대로 작동합니다. 그러나 나는 그것을 OpenGL 프로젝트에 구현하려고 시도했는데 'Recognized'함수가 호출되지 않고있다.C# 음성 인식 (System.Speech.Recognition) 문제

Windows 음성 인식 기능 ("듣기 시작하기"라는 말은 "듣기 시작"이라고 말한 것)에서 단어를로드 할 때로드되는 단어가 표시되므로 단어를 올바르게 감지하고 있다고 가정합니다. 어떤 이유로 이벤트를 트리거하지 않습니다.

다음은 내가 사용 해본 코드입니다. (코드에 표시된 것 외에) 알아야 할 것은 AddCommands가 다른 곳에서 호출되어 테스트 중이라는 것을 추가하고 'Initiate'가 폼로드시 호출된다는 것입니다. .

public class SpeechControls 
{ 
    public static SpeechRecognizer sRecognizer; 

    private static Dictionary<string, IVoiceControlable> controllers = new Dictionary<string, IVoiceControlable>(); 

    public static void Initiate() 
    { 
     sRecognizer = new SpeechRecognizer(); 
     sRecognizer.Enabled = true; 

     sRecognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(Recognized); 
    } 

    private static void Recognized(object obj, SpeechRecognizedEventArgs args) 
    { 
     controllers[args.Result.Text].TriggerCommand(args.Result.Text); 
    } 

    public static void AddCommands(string[] commands, IVoiceControlable control) 
    { 
     foreach (string str in commands) 
     { 
      controllers.Add(str, control); 
     } 

     sRecognizer.LoadGrammar(new Grammar(new GrammarBuilder(new Choices(commands)))); 
    } 
} 

'인식'이 실행되지 않는 이유를 아는 사람이 있습니까?

도움을 주셔서 감사합니다.

+0

'시작'을 호출하는 위치는 어디입니까? –

+0

아, 죄송합니다. 메인 양식을로드하는 중입니다. – Randomman159

+0

SpeechRecognitionRejected 및 AudioSignalProblemOccurred 이벤트에 대한 처리기를 작성하는 것을 잊었습니다. –

답변

0

OpenGL은 이벤트를 듣기보다는 게임 루프를 실행하므로 스레드가 루프에서 완전히 차지합니다. 명령 청취를 시작하려면 두 번째 스레드가 필요합니다.