google chrome speechSynthesis 中的女声

Female voice in google chrome speechSynthesis

我在这两种情况下都使用了这个确切的代码。

        var msg = new SpeechSynthesisUtterance();
        var voices = window.speechSynthesis.getVoices();
        msg.voice = voices[1];
        msg.text = "hello world";
        msg.lang = 'en-US';
        speechSynthesis.speak(msg);

如果我在 chrome 控制台中 运行 这个,我会得到一个女声。但是,如果我将确切的代码放在 index.html 和 运行 中,它就会播放男声。任何人都可以澄清为什么会出现这种差异。提前致谢。

找到根本原因。 Getting the list of voices in speechSynthesis of Chrome (Web Speech API)

调用是异步的,所以当我在 index.html 中尝试 运行 时,voices 数组是空的。正如我在 运行 然后使用 speak 时所建议的那样,它工作正常。

    var msg;
    var voices;
    var timer = setInterval(function() {
        voices = speechSynthesis.getVoices();
        console.log(voices);
        if (voices.length !== 0) {
            msg = new SpeechSynthesisUtterance();
            msg.voice = voices[0];
            speechSynthesis.speak(msg);
            msg.lang = 'en-US';
            clearInterval(timer);
        }
    }, 200);
    timer();
    speechSynthesis.speak("hello world");