vue-文字转语音

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()
})
posted @ 2023-06-16 17:32  赵刚、  阅读(108)  评论(0编辑  收藏  举报