Javascript SpeechSynthesis-在演讲结束前启动ONED
我想创建一个类似于GoBarbara.com的网页。 文本字段的内容将从文本转换为语音 因此,我想使用SpeechSynthesis API(javaScript),它在intro.mp3启动后进行文本到语音的转换。播放完演讲后,应播放end.mp3。 这是由intro.mp3和演讲结尾处的“onend”类型的Eventlisteners处理的 播放音频的基本触发方案是1->2->3。 其中1是intro.mp3,2是speech,3是end.mp3 我当前的代码如下: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
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
beforespeak
时,我在onstart上遇到了类似的问题,通过反转事件和speak语句解决了这个问题-试试看?嘿,Nikolay,我试过了,但不幸的是,当使用较长的字符串时,我得到了语音和mp3开始的重叠…似乎您必须使用speech.onend=playEnd
,而不使用括号,否则该函数会立即被调用