我在GoogleChromev34.0.1847.131上使用语音合成API。该API是在Chrome中实现的,从v33开始。
除了为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
。
发布于 2014-05-12 02:28:53
虽然这是我发现它工作的方式,但我不确定这是否是正确的行为.
首先,不要立即调用call函数,使用回调。
第二,为了获得时间,使用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/
你得到了时间,这两个事件都肯定会被触发。
发布于 2016-03-11 08:54:11
发布于 2014-09-03 22:21:04
您可以使用EventListener作为开始和结束,就像我对Speakerbot (http://www.speakerbot.de/)一样。
在这里,说话时,我的脸变了。
newUtt = new SpeechSynthesisUtterance();
newUtt.addEventListener('start', function () {
console.log('started');
})
newUtt.addEventListener('end', function () {
console.log('stopped');
})
https://stackoverflow.com/questions/23483990
复制相似问题