Warm tip: This article is reproduced from serverfault.com, please click

javascript-SpeechSynthesis API onend回调不起作用

(javascript - SpeechSynthesis API onend callback not working)

发布于 2014-05-06 00:17:28

我正在Google Chrome v34.0.1847.131上使用语音合成API从v33开始,该API已在Chrome中实现。

文字转语音大部分情况下都有效,除非为分配了回调onend例如,以下代码:

var message = window.SpeechSynthesisUtterance("Hello world!");
message.onend = function(event) {
    console.log('Finished in ' + event.elapsedTime + ' seconds.');
};
window.speechSynthesis.speak(message);

有时会调用onend,有时不会调用。时机似乎已完全关闭。当它确实被调用时,打印的elapsedTime时间总是很短的,例如1399237888

Questioner
huu
Viewed
11
4,211 2016-07-10 23:38:54

虽然这是我发现它可以正常工作的方式,但是我不确定这是否是正确的行为...。

首先,不要立即调用语音功能,请使用回调。

2,为了节省时间,请使用timeStamp代替elapsedTime你可能也曾经使用performance.now()过。

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);};

演示:http//jsfiddle.net/QYw6b/2/

你会花费时间,并且肯定会触发这两个事件。