0

I'm using following demo to recognize speech. It's working but sometimes taking more time to load or recognize the speech text. Not sure why it is! But is there any way to set default timeout for the recognize function so that if default maximum timeout exceeded then call the other callback function?

<script>
  // Test browser support
  window.SpeechRecognition = window.SpeechRecognition       ||
                             window.webkitSpeechRecognition ||
                             null;

  if (window.SpeechRecognition === null) {
    document.getElementById('ws-unsupported').classList.remove('hidden');
    document.getElementById('button-play-ws').setAttribute('disabled', 'disabled');
    document.getElementById('button-stop-ws').setAttribute('disabled', 'disabled');
  } else {
    var recognizer = new window.SpeechRecognition();
    var transcription = document.getElementById('transcription');
    var log = document.getElementById('log');

    // Recogniser doesn't stop listening even if the user pauses
    recognizer.continuous = true;

    // Start recognising
    recognizer.onresult = function(event) {
      transcription.textContent = '';

      for (var i = event.resultIndex; i < event.results.length; i++) {
        if (event.results[i].isFinal) {
          transcription.textContent = event.results[i][0].transcript + ' (Confidence: ' + event.results[i][0].confidence + ')';
        } else {
          transcription.textContent += event.results[i][0].transcript;
        }
      }
    };

    // Listen for errors
    recognizer.onerror = function(event) {
      log.innerHTML = 'Recognition error: ' + event.message + '<br />' + log.innerHTML;
    };

    document.getElementById('button-play-ws').addEventListener('click', function() {
      // Set if we need interim results
      recognizer.interimResults = document.querySelector('input[name="recognition-type"][value="interim"]').checked;

      try {
        recognizer.start();
        log.innerHTML = 'Recognition started' + '<br />' + log.innerHTML;
      } catch(ex) {
        log.innerHTML = 'Recognition error: ' + ex.message + '<br />' + log.innerHTML;
      }
    });

    document.getElementById('button-stop-ws').addEventListener('click', function() {
      recognizer.stop();
      log.innerHTML = 'Recognition stopped' + '<br />' + log.innerHTML;
    });

    document.getElementById('clear-all').addEventListener('click', function() {
      transcription.textContent = '';
      log.textContent = '';
    });
  }
</script>

Thanks in advance!

immayankmodi
  • 8,210
  • 9
  • 38
  • 55

1 Answers1

-1

Dont forget to use onspeechend function. This function detects when speech has ended, so you can put the instructions you want when speech has ended.

You want the recognition ends when you stop to talk, so:

Example:

recognition.onspeechend = function() {
  recognition.stop();
}
Bruno
  • 41
  • 2
  • 8