Как активировать и деактивировать распознавание речи определенное количество раз? - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать функцию распознавания речи с помощью WebKit Speech API, которая записывает ввод пользователя три раза. Я использую цикл for, чтобы выполнить итерацию три раза, и в моем цикле for я утешаю некоторые вещи, запускаю распознавание и останавливаю распознавание. Однако в итоге происходит то, что оператор console.log печатается 3 раза мгновенно, и на самом деле ничего не записывается. Что я делаю не так?

Я попытался сделать мою текущую функцию чисто функцией распознавания речи и иметь другую функцию, которая использовала 3 итерации цикла for для ее вызова три раза. Однако произошло то, что все операторы console.log в цикле for были выполнены еще до того, как была вызвана функция записи, и запись произошла.

РЕДАКТИРОВАТЬ: я пытался использовать обратные вызовы, и вот как выглядят мои функции. Тем не менее, функция записи, проверьте, даже ничего не делает после того, как она вызывается в первый раз. Почему это так?

 var word = "fat";

 function processor(i, func2, answer){
   if(word[i] == answer && i == 2){
     console.log('Done');
   }
   else if(word[i] == answer){
     console.log('Continue')
     func2(i+1, processor)
   }
   else{
     console.log('Not yet')
     func2(i, processor)
   }
 }

 function check(i, func){
   var recognizer = new webkitSpeechRecognition();

// Start producing results before the person has finished speaking
  recognizer.interimResults = false;

// Set the language of the recognizer
  recognizer.lang = 'en-US';
  recognizer.onresult = function(event) { //this is the function that is lagging
      console.log('It works')
      var res = event.results[0][0].transcript
      console.log('You said: ', res);

      func(i, check, res);

  };
  recognizer.start();
  console.log('Ready to hear the answer');


 }
function begin(){
  responsiveVoice.speak("Welcome to Bitreed. When you see a letter being highlighted, please say that letter");
  document.getElementById("new").innerHTML = word;

  setTimeout(function() { check(0, processor);}, 7000);

}

Спасибо !!

...