2015-02-07 3 views
0

У нас есть своя редакция тезиса, и один из экспертов сказал, что для улучшения нашей системы распознавания речи необходимо добавить способ обработки команды.Выполнять команды с речью асинхронно

Например, если я дать команду по умолчанию

case "What time is it?": 
WVASRS.Speak("time"); 
break; 

Я хочу, чтобы система была в состоянии сообщить пользователю, что команда по-прежнему обработки, прежде чем пользователь может дать другую команду. Что-то вроде:

//I will give a command while the the other command is processing 
case "What day is it": 
WVASRS.Speak("day"); 
break; 

WVASRS.Speak("Another command is still processing. Please Wait for a few seconds before you can give another command."); 

Ну, если что-то найдено на MSDN, но он просто ничего не делает. вот фрагмент:

// Assign input to the recognizer and start asynchronous 
    // recognition. 
    recognizer.SetInputToDefaultAudioDevice(); 

    completed = false; 
    Console.WriteLine("Starting asynchronous recognition..."); 
    recognizer.RecognizeAsync(RecognizeMode.Multiple); 

    // Wait 30 seconds, and then cancel asynchronous recognition. 
    Thread.Sleep(TimeSpan.FromSeconds(30)); 
    recognizer.RecognizeAsyncCancel(); 

    // Wait for the operation to complete. 
    while (!completed) 
    { 
     Thread.Sleep(333); 
    } 
    Console.WriteLine("Done."); 
+0

Ничего не делая, возможно, программа запускается и завершается до того, как речевой рекордер завершит работу. Если бы вы могли добавить более подробную информацию о произошедшем, это было бы полезно –

ответ

0

код из MSDN более или менее правильно, вы просто пропустите обработчик распознанного команды, увидеть полный пример here:

recognizer.SpeechRecognized += 
      new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized); 

, а затем

// Handle the SpeechRecognized event. 
static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
{ 

    if (actionRunning) { 
     speak("Busy"); 
    } 
    if (e.Result.Text.Equals("what is the time")) { 
     actionRunning = true; 
     startAction() 
    } 
    Console.WriteLine("Speech recognized: " + e.Result.Text); 
}