SpeechSynthesisUtterance|SpeechSynthesisUtterance 语音合成使用
SpeechSynthesisUtterance基本介绍
- SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等
-
SpeechSynthesisUtterance.lang
获取并设置话语的语言 -
SpeechSynthesisUtterance.pitch
获取并设置话语的音调(值越大越尖锐,越低越低沉) -
SpeechSynthesisUtterance.rate
获取并设置说话的速度(值越大语速越快,越小语速越慢) -
SpeechSynthesisUtterance.text
获取并设置说话时的文本 -
SpeechSynthesisUtterance.voice
获取并设置说话的声音 -
SpeechSynthesisUtterance.volume
获取并设置说话的音量
-
speak()
将对应的实例添加到语音队列中 -
cancel()
删除队列中所有的语音.如果正在播放,则直接停止 -
pause()
暂停语音 -
resume()
恢复暂停的语音 -
getVoices
获取支持的语言数组. 注意:必须添加在voiceschanged事件中才能生效
- 【SpeechSynthesisUtterance|SpeechSynthesisUtterance 语音合成使用】html部分
听说 5000
- js部分
const synth = window.speechSynthesis const msg = new SpeechSynthesisUtterance() let voices = [] const voicesDropdown = document.querySelector('[name="voice"]') const options = document.querySelectorAll('[type="range"], [name="text"]') const speakButton = document.querySelector('#speak') const stopButton = document.querySelector('#stop')msg.text = '你好 给你点' msg.lang = 'zh-CN'synth.addEventListener('voiceschanged',getSupportVoices) speakButton.addEventListener('click',throttle(handleSpeak,1000)) stopButton.addEventListener('click',handleStop) options.forEach(e => e.addEventListener('change',handleChange))function getSupportVoices() { voices = synth.getVoices() voices.forEach(e => { const option = document.createElement('option') option.value = https://www.it610.com/article/e.lang option.text = e.name voicesDropdown.appendChild(option) }) } function handleSpeak(e) { msg.lang = voicesDropdown.selectedOptions[0].value synth.speak(msg) } function handleStop(e) { synth.cancel(msg) } function handleChange(e) { msg[this.name] = this.value } function throttle(fn,delay) { let last = 0 return function() { const now = new Date() if(now - last> delay) { fn.apply(this,arguments) last = now } } }
- 页面布局方面就是通过select下拉菜单选择需要转换为什么语言.具体包括什么语言是通过js动态加载的
- 其次分别用两个input的滑动来选择语音播报的速度和音调
- 通过修改textarea来设置需要播报的文字内容
- 最后通过按钮来控制语音的播报和停止
- 首先通过
const synth = window.speechSynthesis
来创建语音,用const msg = new SpeechSynthesisUtterance()
来创建文本实例 - 设置默认播报的文本和语言:
msg.text
和msg.lang
- 通过
voiceschanged
事件来动态获取支持的语言种类,并生成options添加到html中.其中最主要的方法就是synth.getVoices()
获取.各位可以通过自行打印获取到的数组查看具体包含的属性 - 创建按钮点击事件,分别通过
synth.speak(msg)
和synth.cancel(msg)
来播放和取消播放 - 在播放前通过
voicesDropdown.selectedOptions[0].value
来设置文本的语言(这里如果文本的内容语言和播报选择的语言不一致的话会出现乱读的情况) - 最后添加了一个节流函数,防止多次点击按钮不断播放(最好是能获取播放的时长,或监听播报完毕事件,这里就是简单的2秒识别一次,有兴趣的小伙伴可以自行编写)
- 总体来说除了对这个API陌生一些,基本没什么晦涩的代码.做一个基础的了解即可
推荐阅读
- 语音朗读|语音朗读 自我点评
- 语音篇?重读位置(七)
- 借助android|借助android uiautomator+情迁工具箱自动朗读实现语音红包自动发送语音,自动领取
- (第一百一十二期)——情绪
- 【见证贴21】恭喜逍遥玄在徽章合成期间人品爆发,获得1.2倍暴击
- flutter|从集成百度语音SDK说起---flutter与native数据通信初试
- M(MUMPS)语音中的语法
- 将几万张图片合成一张图片,制作一个超赞的马赛克图!
- 将几万张图片合成一张图片,制作一个超赞的马赛克图
- 语音去混响之MCLP算法