cancel()方法的JS SpeechSynthesis问题

Eri*_*rik 5 javascript google-chrome speech-synthesis

我想在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);
Run Code Online (Sandbox Code Playgroud)

预期:以var test开始语音,但由于cancel()立即取消语音。然后使用var test2重新开始语音,这应该可以正常工作。

当然,那没有发生。但是什么都没发生。:D似乎在cancel()之后调用了say()却什么也不做。

API说明如下:

此方法从队列中删除所有语音。如果说出话语,则说话立即停止。此方法不会更改全局SpeechSynthesis实例的暂停状态。

谢谢答案:)

Bas*_*uro 2

我刚刚遇到了同样的问题,取消后发出发言将导致没有发言。

我在clear()调用后添加了一个小超时(250ms),它似乎有效:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)