Вопрос для изменения API веб-речи? - PullRequest
0 голосов
/ 07 сентября 2018

Благодаря отличной работе Мэтью Терентьева Здесь мы можем сделать распознавание речи в Интернете, используя JavaScript в Articulate Storyline. Код ниже запускается с помощью кнопки. это просто и чисто, и это то, что меня смущает больше, я попытался сделать некоторые модификации, и две из них заставляют меня чувствовать, что я большой провал в жизни :(

1) Первый, даже если вы добавите этот код:

распознавание. Продолжение = истина;

... Распознавание не продолжается, когда пользователь делает паузу во время разговора. даже когда я изменяю эту часть на:

recognition.onspeechend = function() {
recognition.start(); // I changed this line from recognition.stop(); 
console.log('Speech ended!');
}

2) Следующая вещь, которую я безуспешно пытался сделать, заключалась в следующем: каждый раз, когда пользователь нажимает, чтобы начать новое распознавание, последний распознанный текст должен исчезать (не тогда, когда пользователь начинает говорить, а когда он нажимает кнопку). в последние 24 часа я безуспешно пытался найти решение этой проблемы.

В проекте Storyline есть кнопка, запускающая код. и переменная, прикрепленная к текстовому полю, которая отвечает за отображение результата для пользователя с именем SpeechReceived.

Вот код:

  var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition;
  var SpeechGrammarList = SpeechGrammarList || webkitSpeechGrammarList;
  var SpeechRecognitionEvent = SpeechRecognitionEvent || webkitSpeechRecognitionEvent;

  var recognition = new SpeechRecognition();
  var speechRecognitionList = new SpeechGrammarList();
  recognition.grammars = speechRecognitionList;
  recognition.lang = 'en-GB';
  recognition.interimResults = false;
  recognition.maxAlternatives = 1;

  recognition.start();

  recognition.onresult = function(event) {

    var speechResult = event.results[0][0].transcript;
 //return speech and change storyline variable with a result
    var player = GetPlayer();
    player.SetVar("SpeechReceived",speechResult);  
    console.log('Confidence: ' + event.results[0][0].confidence);
  }

  recognition.onspeechend = function() {
    recognition.stop();
    console.log('Speech ended!');
  }

  recognition.onerror = function(event) {
 console.log('Error occurred in recognition: ' + event.error);
  }

  recognition.onaudiostart = function(event) {
      //Fired when the user agent has started to capture audio.
      console.log('SpeechRecognition.onaudiostart');
  }

  recognition.onaudioend = function(event) {
      //Fired when the user agent has finished capturing audio.
      console.log('SpeechRecognition.onaudioend');
  }

  recognition.onend = function(event) {
      //Fired when the speech recognition service has disconnected.
      console.log('SpeechRecognition.onend');
  }

  recognition.onnomatch = function(event) {
      //Fired when the speech recognition can't recognise speech
      console.log('SpeechRecognition.onnomatch');
  }

  recognition.onsoundstart = function(event) {
      //Fired when any sound — recognisable speech or not — has been detected.
      console.log('SpeechRecognition.onsoundstart');
  }

  recognition.onsoundend = function(event) {
      //Fired when no sound present
      console.log('SpeechRecognition.onsoundend');
  }

  recognition.onspeechstart = function (event) {
      //Fired when speech starts
      console.log('SpeechRecognition.onspeechstart');
  }
  recognition.onstart = function(event) {
      //Fired when the speech recognition service has begun listening
      console.log('SpeechRecognition.onstart');
  }

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Для вашего первого вопроса вместо использования onspeechend используйте onend для продолжения прослушивания

recognition.onend = function(event) {
  recognition.start();
  console.log('SpeechRecognition.onend');
}

Это заставит микрофон непрерывно слушать.

Что касается второго вопроса, я не знаю. Надеюсь, это поможет с первой проблемой, по крайней мере!

0 голосов
/ 07 сентября 2018

В первом примере кода вы можете не использовать recognition.stop(). И слушайте result вместо speechend. Вы можете объединить результаты, чтобы получить все это.

...