【问题标题】:Is there some voice or speech ready event in JavaScript? [duplicate]JavaScript 中是否有一些语音或语音就绪事件? [复制]
【发布时间】:2020-01-16 21:49:01
【问题描述】:

我在 Google Chrome 上尝试了以下操作。它会打印出0 语音,然后在我的计算机上再次打印出0 语音,但是如果我重新加载页面以重新开始,并将最后一行更改为setTimeout(foo, 1000),那么第一行将打印出0,第二行将打印出87

甚至可以将号码更改为6633,但我不确定这是否取决于计算机速度和网络速度(用于获取语音数据。(可能是内部网络)流量,因为我在调试器的网络选项卡中没有看到任何流量))。

是否有更可靠的方法来获取类似于 DOMReady 事件的ready 事件或调用回调的某种方式,从而更可靠? (而不是使用setTimeout 来延迟未知的持续时间并希望获得最好的结果)。

function foo() {
  msg = new SpeechSynthesisUtterance(),
    voices = window.speechSynthesis.getVoices();

  console.log("How many voices", voices.length);

  msg.text = "Hello World";
  speechSynthesis.speak(msg);
}

foo();
setTimeout(foo, 0);   // just try again in the next event cycle

【问题讨论】:

    标签: javascript ecmascript-6 text-to-speech speech-synthesis


    【解决方案1】:

    voiceschanged event 可能会有所帮助:

    SpeechSynthesis.getVoices() 方法返回的SpeechSynthesisVoice 对象列表发生变化时(当voiceschanged 事件触发时),Web Speech API 的voiceschanged 事件被触发。

    【讨论】:

    • 有趣...起初我以为是某些代码更改了所选声音的事件
    • 如果您有兴趣,您还可以查看stackoverflow.com/questions/59778957/…,了解为什么除非.getVoices() 被调用两次,否则事件似乎无法获得声音数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2015-03-29
    • 2011-08-23
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多