我正在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
。
虽然这是我发现它可以正常工作的方式,但是我不确定这是否是正确的行为...。
首先,不要立即调用语音功能,请使用回调。
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/
你会花费时间,并且肯定会触发这两个事件。
尽管在本示例中确实可行,但是一旦您使用非英语语音,它将立即停止触发onend事件。