mat*_*tt. 3 javascript text-to-speech speech-synthesis webspeech-api
我想用Web Speech API大声说出一系列单词.
这些词是一,二,三,四,五.
在Chrome上说出单词时,下面的脚本会显示第一个单词,然后重复最后一个单词,直到迭代完成,语音输出为:
一,五,五,五,五.
在Firefox上,脚本说第一个单词然后停止,语音输出是:
一个.
我已经把东西记录到控制台,试图弄清楚发生了什么,这是两个浏览器的结果.
word: one
message: one
word: two
message: two
word: three
message: three
word: four
message: four
word: five
message: five
Run Code Online (Sandbox Code Playgroud)
控制台的输出是所需的语音输出,所以我不确定到底发生了什么.
var msg = new SpeechSynthesisUtterance();
var words = ['one', 'two', 'three', 'four', 'five'];
for (var i = 0; i < words.length; i++) {
msg.text = words[i];
console.log('word: ' + words[i]);
console.log('message: ' + msg.text);
window.speechSynthesis.speak(msg);
}Run Code Online (Sandbox Code Playgroud)
可能导致这种情况的原因是什么?我该怎么做才能纠正它?
小智 5
您SpeechSynthesisUtterance每次都需要使用一个新实例.
var words = ['one', 'two', 'three', 'four', 'five'];
for (var i = 0; i < words.length; i++) {
var msg = new SpeechSynthesisUtterance();
msg.text = words[i];
console.log('word: ' + words[i]);
console.log('message: ' + msg.text);
window.speechSynthesis.speak(msg);
}
Run Code Online (Sandbox Code Playgroud)
语音不会在零时间播放,并且似乎后续SpeechSynthesisUtterance实例被放入队列中,直到前一个语音播放完毕.您重复使用同一个实例,在排队之后speak(...)但在它们从队列中弹出并读取之前修改这些值.第一个话语("一个")正确播放,因为队列中没有其他东西可以阻止它(它立即读取),但其余部分需要等待,并在读取之前最终修改.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |