首页 > 其他分享 >vue-文字转语音

vue-文字转语音

时间:2023-06-16 17:47:23浏览次数:36  
标签:文字 vue console log text instance 语音 msg event

vue

SpeechSynthesisUtterance监听事件

onstart 开始合成

onend 合成结束

onerror 合成错误

onpause 暂停

onresume 恢复暂停

onboundary 在句子或单词边界

<template>
  <div class="language">
    <!--    <div class="right-lanage">-->
    <img src="../../assets/img/zanting.png" alt="" style="float: right; padding-right: 20px; padding-top: 7px"
         v-if="show" @click="playVoice">
    <img src="../../assets/img/bofang.png" alt="" style="float: right; padding-right: 20px; padding-top: 7px"
         v-else
         @click="playVoice">
    <p>{{text}}</p>
  </div>
  <!--  </div>-->
</template>
const synth = window.speechSynthesis;
const msg = new SpeechSynthesisUtterance();
  data() {
    return {
      show: false, //显示与隐藏
      text:'据盖茨基金会官方微博6月15日消息,比尔及梅琳达'
    }
  },
  methods: {
    playVoice() {
      this.show = !this.show;
      this.handleSpeak(this.text)
      if (this.show===false) {
        this.handleStop()
      }
    },
    // 语音播报的函数
    handleSpeak(text) {
      msg.text = text;     // 文字内容: 小朋友,你是否有很多问号
      msg.lang = "zh-TW";  // 使用的语言:中文
      msg.volume = 1;      // 声音音量:1
      msg.rate = 1;        // 语速:1
      msg.pitch = 1;       // 音高:1
      synth.speak(msg);    // 播放
      msg.onend = (event) => {  //语音合成结束时候的回调(语音读完后触发)
        alert('合成结束');
      }
    },
    // 语音停止
    handleStop(e) {
      msg.text = e;
      msg.lang = "zh-CN";
      synth.cancel(msg);
    }
  },
const speak = (word) => {
  let msg = new window.SpeechSynthesisUtterance(word);
  // msg.text = word; //播放文案
  msg.volume = '1'; // 声音的音量,区间范围是0到1,默认是1。
  msg.rate = 1;// 设置播放语速,范围:0.1 - 10之间    正常为1倍播放
  msg.pitch = '0'; // 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1。
  msg.lang = 'zh-cn'; // 使用的语言,字符串, 例如:"zh-cn"
  msg.voiceURI = 'Ting-Ting'
  msg.voiceURI = 'Google 普通话(中国大陆)';

  msg.onend = (event) => {  //语音合成结束时候的回调(语音读完后触发)
    console.log('合成结束');
  }
  msg.onstart = (event) => {
    console.log('合成开始');
  }
  msg.onerror = (event) => {
    console.log('onerror');
  }
  msg.onpause = (event) => {
    console.log('暂停');
  }
  msg.onresume = (event) => {
    console.log('恢复');
  }
  msg.onboundary = (event) => {
    console.log('在单词或句子边界');
  }
  window.speechSynthesis.speak(msg);
  return window.speechSynthesis;
}
let instance = null;
ele.addEventListener('click', () => {
  instance = speak('123456789')
  console.log(instance.getVoices());
})
pause.addEventListener('click', () => {
  instance.pause()
})
resume.addEventListener('click', () => {
  instance.resume()
})
cancel.addEventListener('click', () => {
  instance.cancel()
})

标签:文字,vue,console,log,text,instance,语音,msg,event
From: https://www.cnblogs.com/zgboy/p/17486137.html

相关文章

  • vue实现点击按钮一键复制功能
    点击复制按钮后,将内容一键复制下来,不用去选中复制第一种直接使用js方式:<divclass="mask-cont"><p><inputid="input"/></p><buttonclass="btns"@click="copyToClip">复制</button></div>copyToClip()......
  • 实现背景透明,文字不透明的效果
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <title>Title</title>  <style>    *{      margin:0;       /*消除边界*/      padding:0;    ......
  • 【vue】vue全家桶是什么?
    Vue全家桶一般来说包括项目构建工具vue-cli、路由管理器vue-Router、状态管理模式vuex、网络请求库Axios、ui框架、打包工具webpack,下面我们分别介绍。1.项目构建工具:vue-cliVue.js+webpack的项目模板。Vuecli提供了强大的功能,用于定制新项目、配置原型、添加插件和检查webpac......
  • NV400F语音IC,充电桩语音方案,支持UART音频更换
    随着电动车的不断增加,户外、居民楼、小区、办公楼附近出现了越来越多的共享充电桩,不管是是给汽车、还是电动单车充电,这种新型共享充电设备越来越被人们所接受和青睐。而在共享充电桩的使用过程中,语音交互技术则是一项不可或缺的技术,它可以带给用户更高效、更便捷的使用体验。对于当......
  • vue技术点归纳
    1.vue是什么?vue是一套构建用户界面的渐进式框架,核心库只关注视图层。vue和react相同点:1.都使用virtualDOM;2.提供了响应式(reactive);3.组件化(composable)的视图组件;4.都支持native方案;5.都支持SSR服务端渲染;6.都支持props进行父子组件通信;不同之处就是:1.数据......
  • 关于vue2路由跳转问题记录
    1.vue路由间跳转和新开窗口的方式(query,params)路由间跳转配置:query方式:参数会在url中显示this.$router.push({path:'路由地址',query:{msg:'helloworld'}})params方式:传参数据不会在导航栏中显示,需要配合路由的name属性使用。this.$......
  • Vue3 设置全局变量
    方式一:main.js设置全局变量importapifrom'@/api'app.config.globalProperties.$api=api使用全局变量,使用getCurrentInstance方法。//ctx.$api就是全局设置的变量const{proxy:{$api},}=getCurrentInstance();//ctx.$api就是全局设置的变量con......
  • CSS 如何根据背景色自动切换黑白文字?
    在项目中,经常会碰到背景色不确定的场景,为了让内容文字足够清晰可见,文字和背景之间需要有足够的对比度。换句话说,当背景是深色时,文字为白色,当背景是浅色时,文字为黑色,就像这样:一、CSS滤镜实现使用滤镜对文字单独处理,所以需要额外一层标签。然后容器和文字用同一种颜色表示,目的是......
  • 直播平台怎么搭建,vue 中判断数组中是否有重复的数据
    直播平台怎么搭建,vue中判断数组中是否有重复的数据  isRepeat(v){   letobj={}   for(letiinv){    if(obj[v[i]]){     returntrue    }    obj[v[i]]=true   }   returnfalse  },​ 以上就是......
  • vue+html2canvas生成寄几想要的海报
    需求:点击弹出一个弹窗,其中是某个作品内容的海报,需要呈现作品的内容+二维码 思路:获取作品内容渲染到弹窗中,生成包含分享链接的二维码,将整个界面转为图片,用户可以长按保存,并扫描识别。 方案及步骤:1.引入html2canvas实现生成图片的功能npminstall--savehtml2canvas 2......