SpeechSynthesis API onend callback not working
According to this comment on the bug mentioned in the answer from Kevin Hakanson, it might be a problem with garbage collection. Storing the utterance in a variable before calling speak
seems to do the trick:
window.utterances = [];var utterance = new SpeechSynthesisUtterance( 'hello' );utterances.push( utterance );speechSynthesis.speak( utterance );
While this is how I found it to make it work, I am not sure if this is the right behavior....
First don't call the speak function it right away, use callback.
2nd, to get time use timeStamp
instead of elapsedTime
. You could have just used performance.now()
as well.
var btn = document.getElementById('btn');speechSynthesis.cancel()var u = new SpeechSynthesisUtterance();u.text = "This text was changed from the original demo.";var t;u.onstart = function (event) { t = event.timeStamp; console.log(t);};u.onend = function (event) { t = event.timeStamp - t; console.log(event.timeStamp); console.log((t / 1000) + " seconds");};btn.onclick = function () {speechSynthesis.speak(u);};
Demo: http://jsfiddle.net/QYw6b/2/
you get time passed and both events fired for sure.
You could use the EventListener for start and end like I did for Speakerbot (http://www.speakerbot.de/).
Here my face changes while words are spoken.
newUtt = new SpeechSynthesisUtterance();newUtt.addEventListener('start', function () { console.log('started');})newUtt.addEventListener('end', function () { console.log('stopped');})