JavaScript 中是否有一些语音或语音就绪事件?
Is there some voice or speech ready event in JavaScript?
我在 Google Chrome 上尝试了以下操作。它会打印出 0
个声音,并在我的计算机上再次打印出 0
个声音,但是如果我 重新加载页面以重新开始, 并更改最后一个行到 setTimeout(foo, 1000)
,然后第一行将打印出 0
和第二行,87
.
甚至可以把号码改成66
或33
也能用,但我不确定这是否取决于计算机速度和网络速度(用于获取语音数据。 (可能是内部网络流量,因为我在调试器的网络选项卡中没有看到任何流量)。
是否有更可靠的方法来获取类似于 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
voiceschanged
event 可能有帮助:
The voiceschanged
event of the Web Speech API is fired when the list of SpeechSynthesisVoice
objects that would be returned by the SpeechSynthesis.getVoices()
method has changed (when the voiceschanged
event fires.)
我在 Google Chrome 上尝试了以下操作。它会打印出 0
个声音,并在我的计算机上再次打印出 0
个声音,但是如果我 重新加载页面以重新开始, 并更改最后一个行到 setTimeout(foo, 1000)
,然后第一行将打印出 0
和第二行,87
.
甚至可以把号码改成66
或33
也能用,但我不确定这是否取决于计算机速度和网络速度(用于获取语音数据。 (可能是内部网络流量,因为我在调试器的网络选项卡中没有看到任何流量)。
是否有更可靠的方法来获取类似于 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
voiceschanged
event 可能有帮助:
The
voiceschanged
event of the Web Speech API is fired when the list ofSpeechSynthesisVoice
objects that would be returned by theSpeechSynthesis.getVoices()
method has changed (when thevoiceschanged
event fires.)