Javascript SpeechSynthesis-在演讲结束前启动ONED

Javascript SpeechSynthesis-在演讲结束前启动ONED,javascript,text-to-speech,Javascript,Text To Speech,我想创建一个类似于GoBarbara.com的网页。 文本字段的内容将从文本转换为语音 因此,我想使用SpeechSynthesis API(javaScript),它在intro.mp3启动后进行文本到语音的转换。播放完演讲后,应播放end.mp3。 这是由intro.mp3和演讲结尾处的“onend”类型的Eventlisteners处理的 播放音频的基本触发方案是1->2->3。 其中1是intro.mp3,2是speech,3是end.mp3 我当前的代码如下: function doS

我想创建一个类似于GoBarbara.com的网页。 文本字段的内容将从文本转换为语音

因此,我想使用SpeechSynthesis API(javaScript),它在intro.mp3启动后进行文本到语音的转换。播放完演讲后,应播放end.mp3。 这是由intro.mp3和演讲结尾处的“onend”类型的Eventlisteners处理的

播放音频的基本触发方案是1->2->3。 其中1是intro.mp3,2是speech,3是end.mp3

我当前的代码如下:

function doSpeech() {
   var speech = new SpeechSynthesisUtterance();
   speech.text = getText();
   speech.lang = "en-US";
   speech.voice = speechSynthesis.getVoices().filter(function(voice) {return voice.name == 'Google UK English Male'; })[0];     
   speechSynthesis.speak(speech);
   speech.onend = playEnd();
}
要触发end.mp3,我想使用SpeechOnEnd事件。 但是onend在实际演讲结束之前启动end.mp3

看来这可能是个bug。但是,如果不是这样的话,我怎样才能让mp3在文本被说出后正确启动,直到结束?注意:语音部分的长度可以不同。

正确的代码是

function doSpeech() {
   var speech = new SpeechSynthesisUtterance();
   speech.text = getText();
   speech.lang = "en-US";
   speech.voice = speechSynthesis.getVoices().filter(function(voice) {return voice.name == 'Google UK English Male'; })[0];     
   speech.onend = playEnd();
   speechSynthesis.speak(speech);
}

使用
onend
before
speak

时,我在onstart上遇到了类似的问题,通过反转事件和speak语句解决了这个问题-试试看?嘿,Nikolay,我试过了,但不幸的是,当使用较长的字符串时,我得到了语音和mp3开始的重叠…似乎您必须使用
speech.onend=playEnd
,而不使用括号,否则该函数会立即被调用