SpeechSynthesis.pause暂停后会自动触发end事件(未解决)
SpeechSynthesis.pause()暂停后会自动触发end事件
问题描述
语音播放后,调用暂停方法,一段时间(几秒)后会自动触发end事件
// 开始播放
const u = new SpeechSynthesisUtterance('一些文本...')
speechSynthesis.speak(u)
// 监听语音播放结束
speechSynthesis.onend = function() {
console.log('end')
}
// ...
// 暂停
speechSynthesis.pause() // 先触发pause事件,几秒后会输出'end',即又触发了end事件
探索
根据官方例子测试发现,设置lang = 'en-US'
则暂停后不会自动触发end事件(设置其他语言,如en、en-GB、zh-HK等都不能解决问题)
查看默认语言,发现为'zh-CN'
const voices = u.getVoices() // 获取支持的语言列表
console.log(voices.find(voice => voice.default))
调用speek()前,先设置语言为en-US
u.lang = 'en-US'
但是,这样就不会说中文了(遇到中文说出了奇怪的话)
另外,播放逻辑:
speek()之后,结束之前,可以调用pause()暂停、调用cancel()取消
pause()之后可以调用resume()继续、cancel()取消
resume()之后可以pause()、cancel()
cancel()之后再说话需要重新speek()
如果pause()之后触发了end事件,则调用继续方法失效,只能先cancel()然后重新speek()了