我想在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);
    }
}

10-04 22:04