当前位置: 首页 > news >正文

文字转语音:语音合成(Speech Synthesis) 数组文字循环播放

前言:
HTML5中和Web Speech相关的API实际上有两类,一类是“语音识别(Speech Recognition)”,另外一个就是“语音合成(Speech Synthesis)”, 这两个名词实际上指的分别是“语音转文字”,和“文字变语音”。

speak() – 只能接收SpeechSynthesisUtterance作为唯一的参数,作用是读合成的话语。 stop() – 立即终止合成过程。 pause() – 暂停合成过程。 resume() – 重新开始合成过程。 getVoices() – 此方法不接受任何参数,用来返回浏览器支持的语音包列表,是个数组。 speechSynthesis.getVoices()返回因每个浏览器不同及版本的不同返回不太一样,大致是这样:

注意:语言包获取不稳定,有时候返回为空,可以用定时器多试几次。

  • SpeechSynthesisUtterance主要用来构建语音合成实例,
  • speechSynthesis大概用来触发浏览器语音模块,让浏览器把内容读出来。 想要浏览器开口说话,只需要:
     
    let speechInstance = new SpeechSynthesisUtterance('大家好,我是渣渣辉。');
    speechSynthesis.speak(speechInstance);`就是这么简单,不妨copy进浏览器试一下?
    // 更换语言
    var msg = new SpeechSynthesisUtterance();
    var voices = window.speechSynthesis.getVoices(); // 获取语言包
    msg.voice = voices[18]; // 18:普通话
    msg.text = "Hello World";
    speechSynthesis.speak(msg); // 

    SpeechSynthesisUtterance实例有以下属性,可以通过设置一下属性调整发音:

  • text – 要合成的文字内容,字符串。

  • lang – 使用的语言,字符串, 例如:"zh-cn"

  • voiceURI – 指定希望使用的声音和服务,字符串。

  • volume – 声音的音量,区间范围是0到1,默认是1。

  • rate – 语速,数值,默认值是1,范围是0.1到10,表示语速的倍数,例如2表示正常语速的两倍。

  • pitch – 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1。


    还有一些方法:

  • onstart – 语音合成开始时候的回调。
  • onpause – 语音合成暂停时候的回调。
  • onresume – 语音合成重新开始时候的回调。
  • onend – 语音合成结束时候的回调。
  • speechSynthesis对象有以下方法:

 代码如下: 

<template><div class="box"><!-- <input type="text" name="text" id="text" v-model="text" /> --><button @click="playVoice">播放语音</button><button @click="pauseVoice" v-if="status === '开始播放'">暂停播放</button><button @click="resumeVoice" v-if="status === '暂停播放'">继续播放</button><button @click="stopVoice">停止播放</button><div>播放状态:{{ status }}</div></div>
</template><script>
const synth = window.speechSynthesis
const msg = new window.SpeechSynthesisUtterance()
export default {data() {return {currentMsgIndex: 0,text: "",status: "",tableData: [{ text: '切换后基站BCCH与TCH电平不一致' },{ text: '切换带异常' },{ text: '切换后TA偏大' },{ text: '切换后基站BCCH与TCH电平不一致' },{ text: '切换带异常' },{ text: '切换后TA偏大' },{ text: '切换后基站BCCH与TCH电平不一致' },{ text: '切换带异常' },{ text: '切换后TA偏大' }]}},created() {this.playVoice()},mounted() {msg.onstart = e => {// this.currentMsgIndex = 0this.status = '开始播放'console.log(this.status)}msg.onend = e => {this.status = '结束播放'console.log(this.status)this.currentMsgIndex++if (this.currentMsgIndex < this.tableData.length) {this.playVoice()} else {this.currentMsgIndex = 0}console.log(this.currentMsgIndex)}msg.onpause = e => {this.status = "暂停播放"console.log('onpause:', this.status)}},destroyed() {this.stopVoice()},methods: {//播放playVoice() {this.handleSpeak(this.tableData[this.currentMsgIndex].text)},//暂停pauseVoice() {this.handlePause()},//继续resumeVoice() {this.handleResume()},//停止stopVoice() {this.handleStop()},handleSpeak(TEXT) {console.log('TEXT:', TEXT)// if (!this.text) return alert('请输入文本!')msg.text = TEXT // this.textmsg.lang = 'zh-CN' // 语言msg.volume = 1 // 音量:0~1,默认1msg.rate = 1 // 语速:0.1~10,默认1msg.pitch = 1 // 音高:0~2,默认1// msg.voiceURI=''// 希望使用的声音synth.speak(msg)},handleStop(e) {synth.cancel(msg)},handlePause(e) {synth.pause(this.tableData[this.currentMsgIndex].text)},handleResume(e) {synth.resume(msg)}}
}
</script>

http://www.lryc.cn/news/184576.html

相关文章:

  • Spark基础
  • localhost和127.0.0.1都可以访问项目,但是本地的外网IP不能访问
  • 快速掌握批量合并视频
  • OpenCV利用Camshift实现目标追踪
  • 使用pywin32读取doc文档的方法及run输出乱码 \r\x07
  • 一天一八股——TCP保活keepalive和HTTP的Keep-Alive
  • 头部品牌停业整顿,鲜花电商的中场战事迎来拐点?
  • 深入解读redis的zset和跳表【源码分析】
  • elasticsearch内存占用详细分析
  • 【研究生学术英语读写教程翻译 中国科学院大学Unit3】
  • 基于虚拟同步发电机控制的双机并联Simulink仿真模型
  • 微信小程序开发——自定义堆叠图
  • 国庆day5
  • 经典算法----迷宫问题(找出所有路径)
  • macOS下 /etc/hosts 文件权限问题修复方案
  • 【星海出品】ansible入门(二) playbook
  • Spring Boot对账号密码进行加密储存
  • 总结js中常见的层次选择器
  • 阿里云ECS服务器上启动的portainer无法访问的问题
  • JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域
  • 开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)
  • [C]嵌入式中变量存储方案
  • 热迁移中VirtIO-PCI设备的配置空间处理
  • 模拟滤波器的基础知识和设计
  • 机器学习基础-Pandas学习笔记
  • 【GIT版本控制】--协作流程
  • 简析Cookie、Session、Token
  • 加速attention计算的工业标准:flash attention 1和2算法的原理及实现
  • 小程序获取用户手机号
  • Zama的fhEVM:基于全同态加密实现的隐私智能合约