我想在Chrome中使用window.SpeechSynthesis的cancel方法来切断话语并开始一个新的话(这样您就不必听到仍在排队的所有话语了)
var test = new SpeechSynthesisUtterance("Test");
window.speechSynthesis.speak(test);
window.speechSynthesis.cancel();
var test2 = new SpeechSynthesisUtterance("Test2");
window.speechSynthesis.speak(test2);
预期:以var test开始语音,但由于cancel()立即取消语音。
然后使用var test2重新开始语音,这应该可以正常工作。
好吧,那当然没有发生。但是什么都没发生。 :D
似乎在cancel()之后调用了speak()却无济于事。
API说明如下:
谢谢答案:)
最佳答案
我只是遇到了同样的问题,在取消后发出语音不会导致说话。
我在 clear()调用之后添加了一个小的超时时间(250毫秒),它似乎可以正常工作:
var sayTimeout = null;
function say(text) {
if (speechSynthesis.speaking) {
// SpeechSyn is currently speaking, cancel the current utterance(s)
speechSynthesis.cancel();
// Make sure we don't create more than one timeout...
if (sayTimeout !== null)
clearTimeout(sayTimeout);
sayTimeout = setTimeout(function () { say(text); }, 250);
}
else {
// Good to go
var message = new SpeechSynthesisUtterance(text);
message.lang = "en-US";
speechSynthesis.speak(message);
}
}