SpeechSynthesis.pause暂停后会自动触发end事件

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()了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值